我试图了解运行时以下异常代码的输出。我知道打印的内容是“ adb”,但我不明白为什么要打印。
public class MyClass {
static String str = "a";
public static void main(String[] args) {
new MyClass().method1();
System.out.println(str);
}
void method1() {
try {
method2();
}
catch (Exception e) {
str += "b";
}
}
void method2() throws Exception {
try {
method3();
str += "c";
}
catch (Exception e) {
throw new Exception();
}
finally {
str += "d";
}
method3();
str += "e";
}
void method3() throws Exception {
throw new Exception();
}
}
调用method3()时,它将引发一个新异常,该异常被method2()捕获,还引发一个新异常,该异常被method1()捕获,在字符串中添加“ b”,最后添加块在method2()中执行,添加“ d”?那么为什么它不是“ abd”,而是“ adb”?
答案 0 :(得分:1)
str = "a"
现在称为method1()
现在method2()
中的method1()
被调用
现在method3()
中的method2()
被调用
并引发异常,则该异常将捕获在method2()
中,并且不会执行str+= "c"
。而是抛出一个新的异常,并执行finally
子句:
str += d
method3()再次被调用,引发异常,该异常又被添加到method1()添加中
str += b
我们在这里。