异常机制1 同时出现父类和子类异常的捕获

参考资料:《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());
        }
    }
}
//执行结果;
/*
已经捕获
*/

你可能感兴趣的:(异常机制1 同时出现父类和子类异常的捕获)