在此示例中,我们将学习在Java中创建自定义的已检查和未检查的异常。
要理解此示例,您应该了解以下Java编程主题:
import java.util.ArrayList; import java.util.Arrays; //创建一个检查异常类 class CustomException extends Exception { public CustomException(String message) { //调用Exception类的构造函数 super(message); } } class Main { ArrayList<String> languages = new ArrayList<>(Arrays.asList("Java", "Python", "JavaScript")); //检查异常 public void checkLanguage(String language) throws CustomException { // 如果language 已经出现在 ArrayList 中,则抛出异常 if(languages.contains(language)) { throw new CustomException(language + " 已经存在"); } else { // 将language 插入到 ArrayList languages.add(language); System.out.println(language + " 被添加到ArrayList"); } } public static void main(String[] args) { // 创建Main类的对象 Main obj = new Main(); //使用try…catch处理异常 try { obj.checkLanguage("Swift"); obj.checkLanguage("Java"); } catch(CustomException e) { System.out.println("[" + e + "] 发生异常"); } } }
输出结果
Swift 被添加到ArrayList [CustomException: Java already exists] 发生异常
在上面的示例中,我们扩展了Exception类以创建一个名为CustomException的自定义异常。 在这里,我们使用super()关键字从CustomException类中调用Exception类的构造函数。
在方法checkLanguage()中,我们检查了异常情况,如果发生异常,则try..catch块将处理该异常。
在这里,这是检查的异常。我们还可以在Java中创建未经检查的异常类。要了解有关已检查和未检查的异常的更多信息,请访问Java Exception。
import java.util.ArrayList; import java.util.Arrays; //创建未检查的异常类 class CustomException extends RuntimeException { public CustomException(String message) { //调用RuntimeException的构造函数 super(message); } } class Main { ArrayList<String> languages = new ArrayList<>(Arrays.asList("Java", "Python", "JavaScript")); //检查异常情况 public void checkLanguage(String language) { //如果ArrayList中已存在编程语言,则引发异常 if(languages.contains(language)) { throw new CustomException(language + " 已经存在"); } else { //将编程语言插入到ArrayList languages.add(language); System.out.println(language + " 被添加到ArrayList"); } } public static void main(String[] args) { //创建Main类的对象 Main obj = new Main(); //检查编程语言是否已经存在 obj.checkLanguage("Swift"); obj.checkLanguage("Java"); } }
输出结果
Swift is 被添加到ArrayList Exception in thread "main" CustomException: Java already exists at Main.checkLanguage(Main.java:21) at Main.main(Main.java:37)
在上面的示例中,我们扩展了RuntimeException类以创建未经检查的自定义异常类。
在这里,您可能已经注意到,我们没有声明任何try ... catch块。这是因为未检查的异常是在运行时检查的。
除此之外,未检查异常的其他功能与上述程序类似。