亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么下面的Java代碼的輸出是“adb”,而不是“abd”?

為什么下面的Java代碼的輸出是“adb”,而不是“abd”?

紅顏莎娜 2023-10-12 14:50:56
我試圖了解下面的異常代碼在運行時打印的內容。我知道它打印的是什么“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

我們到了。


查看完整回答
反對 回復 2023-10-12
  • 1 回答
  • 0 關注
  • 107 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號