版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/qq_38225558/article/details/82054100
try {
可能出現異常的代碼(包括不會出現異常的代碼)
} catch (Exception e) { //()里為接收try{}代碼塊中出現異常的類型
如果出現異常時的處理方式
}
try-catch的執行順序:
①從 try{ } 代碼塊中第一行開始執行,執行到出現異常的代碼,jvm會創建一個異常對象
②判斷catch中聲明的異常類型是否能捕捉到jvm創建的異常對象
i: 能捕捉到:直接跳到catch代碼塊中執行。 不會結束程序,繼續從catch代碼塊后面的代碼執行
ii: 不能捕捉到:直接打印異常信息並結束程序
③try{} 中沒有出現任何異常,把try中的所有代碼執行完,跳過catch繼續程序
注意:
1.能被catch捕捉到的條件 ==》try中創建的異常對象的類型與catch中聲明的類型一致,或者是catch中聲明的類型的子類。
2.如果只有一個捕捉指定類型的catch 只能捕捉對應類型的異常對象。 如果try中創建了其他類型的異常,捕捉不到。Jvm來處理異常
3.try{}代碼塊中存在多行代碼會拋出異常的情況下,遇到第一個異常,后面代碼的異常 只會被catch捕捉到異常信息但都將不會被執行
4.那么我們如何才能處理try{}中的每一個異常呢??
① 寫多個catch : 每一個catch處理一種異常 ==> try{ }catch(){ }catch(){ }catch(){ }
效果:當try中出現了異常,直接跳到第一個catch處判斷,是否能捕捉。
a:能捕捉:直接處理。 然后跳過trycatch往后執行
b:不能捕捉:跳到下一個catch繼續判斷。如果下一個能捕捉,重復第一步的效果
c:所有catch都不能捕捉 ==> 交給jvm處理:結束程序,在控制台打印異常信息
② 寫一個catch 要求:catch中的異常類型必須是try中拋出的所有異常的父類
注意事項:寫多個catch時,下邊的catch聲明的異常類型不能是上邊的catch聲明的子類。
多個catch時,異常父類必須在下邊。 (沒有繼承關系時,就不用考慮此情況)
try{ }catch(){ }catch(){ }...finally{ } (catch可以有多個,也可以沒有 ==》 try{ }finally{ })
特點:寫在finally代碼塊中代碼,一定會被執行到
注意:①執行了 return 也會執行finally
②但 執行 System.exit(0) 就不會再執行finally了!!!
ex1: (此時 Integer in = new Integer("1"); 不會出現異常的情況下)
ex2: (此時 Integer in = new Integer("A1"); 出現異常的情況下)
ex3: 多個catch
ex4 :1個catch
ex5: return不影響finally{ }代碼塊中代碼的執行
ex6 : 執行 System.exit(0) ==》 便不會再執行finally{ }代碼塊中代碼
————————————————
版權聲明:本文為CSDN博主「鄭清」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_38225558/article/details/82054100