异常处理方法退出而没有完成

时间:2016-10-24 09:17:26

标签: java exception-handling

我正在学习异常处理,现在我有一个问题 我认为这段代码的结果是345,但是,我不知道为什么结果是35 即使发生异常,也不应该运行代码System.out.println(4)吗?

public class Six {
    public static void main(String[] args) {
        try { 
            method1();
        } catch(Exception e) { 
            System.out.println(5);
        } 
    }

    static void method1() { 
        try {
            method2();
            System.out.println(1);
        } catch(ArithmeticException e) {
            System.out.println(2); 
        } finally {
            System.out.println(3); 
        }
        System.out.println(4); 
    }

    static void method2() {
        throw new NullPointerException();
    }
}

2 个答案:

答案 0 :(得分:1)

method2()中抛出NullPointerException,而在method1()中,您只能抓住ArithmethicException这是一个不同的异常。在这种情况下,不处理method1()的catch块。只执行finally块然后退出该方法并将异常重新抛出到调用方法(main()

答案 1 :(得分:0)

不,不打印4,因为NullPointerException仍处于活动状态,此时未捕获。保证执行finally块(其中3是打印的),这样你就可以在那里进行清理,但它不会停止'例外。