2 回答

TA貢獻1880條經驗 獲得超4個贊
try塊后catch塊不是必須的,但如果try塊后沒有catch塊,就必須有finally塊,也就是說try不能單獨使用。
try塊后不接catch,在框架設計上常出現,本方法若出現Exception時,自己不處理,拋出到框架專門處理Exception的特定位置去統一處理。
這個Exception會向上拋至調用處,如果仍沒有catch就會再向上拋,如果程序一直沒有處理,這個Exception最后會拋到jvm中,然后jvm就會報告一個錯誤。
你這里的代碼,Exception會在main函數的try-catch中捕獲并處理。
20行的catch是屬于另一個try塊的,與test函數中的finally無關。當test函數的try塊中出現異常,就會直接跳進finally,finally塊中的內容執行完后,再將產生的異常向調用者拋出,也就是main函數。在main函數的try-catch中捕獲并處理。
也就打印了finally exception
最后被catch到的異常是NullPointerException空指針異常。
第13行 String x = null;
對象都不存在,第14行x.toString()就會產生一個NullPointerException。

TA貢獻1817條經驗 獲得超14個贊
12行的try語句可以不用catch.這里發生的空指針異常在20行的catch處理了。
20行的catch是在finally語句之后執行的么? 是的。
錯誤原因就是x.toString()這個方法,發生空指針異常。
x不能為null。
添加回答
舉報