我試圖了解下面的異常代碼在運行時打印的內容。我知道它打印的是什么“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”,然后在finally塊中執行method2(),添加“d”?那么為什么不是“abd”,而是“adb”呢?
1 回答

UYOU
TA貢獻1878條經驗 獲得超4個贊
str = "a"
現在method1()
被稱為
現在method2()
被叫進來method1()
nowmethod3()
被調用method2()
并拋出異常,異常被捕獲method2()
并且str+= "c"
不被執行。相反,會拋出一個新的異常并finally
執行該子句:
str += d
method3() 再次被調用,拋出異常,該異常又被 method1() 添加捕獲
str += b
我們到了。
添加回答
舉報
0/150
提交
取消