参考资料:《Java程序设计经典课堂》(清华大学出版社)
通过程序代码来说明同时出现父类和子类异常的捕获的顺序问题。
public class ExceptionErrorDemo {
public static void main(String[] args) {
int[] numbers = new int[3];
try {
numbers[0] = 1;
numbers[1] = 3;
numbers[2] = 7;
numbers[3] = numbers[2] / 0;//会抛出算术运算异常;
} catch (Exception e) {
System.out.println(e.toString());
} catch (ArithmeticException e) {
e.toString();
}
}
}
/*
ExceptionErrorDemo.java:11: 错误: 已捕获到异常错误ArithmeticException
} catch (ArithmeticException e) {
^
1 个错误
*/
我们知道,Java中异常类之间也存在继承关系。在这里,Exception类是ArithmeticException类的父类,父类可以捕获它的子类能捕获的所有异常。如果该父类捕获异常的代码出现在子类捕获异常的代码之前,则父类都会先捕获这些异常,导致后面所有子类捕获异常的代码永远得不到执行,从而出现编译错误,将父类放在最后即可解决这个问题。
public class ExceptionErrorDemo {
public static void main(String[] args) {
int[] numbers = new int[3];
try {
numbers[0] = 1;
numbers[1] = 3;
numbers[2] = 7;
numbers[3] = numbers[2] / 0;//会抛出算术运算异常;
} catch (ArithmeticException e) {
System.out.println("已经捕获");
e.toString();
} catch (Exception e) {
System.out.println(e.toString());
}
}
}
//执行结果;
/*
已经捕获
*/