我試圖了解下面的異常代碼在運(yùn)行時(shí)打印的內(nèi)容。我知道它打印的是什么“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();}}當(dāng)調(diào)用method3()時(shí),它拋出一個(gè)新的異常,該異常被method2()捕獲,同樣拋出一個(gè)新的異常,該異常被method1()捕獲,在字符串中添加“b”,然后在finally塊中執(zhí)行method2(),添加“d”?那么為什么不是“abd”,而是“adb”呢?
1 回答

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