我正在学习异常处理,现在我有一个问题 我认为这段代码的结果是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();
}
}
答案 0 :(得分:1)
在method2()
中抛出NullPointerException
,而在method1()
中,您只能抓住ArithmethicException
这是一个不同的异常。在这种情况下,不处理method1()
的catch块。只执行finally块然后退出该方法并将异常重新抛出到调用方法(main()
)
答案 1 :(得分:0)
不,不打印4,因为NullPointerException仍处于活动状态,此时未捕获。保证执行finally块(其中3是打印的),这样你就可以在那里进行清理,但它不会停止'例外。