使用try...catch的處理異常機制

使用try...catch的處理異常機制
Java的異常處理可以讓程序具有更好的容錯性,程序更加健壯。當程序運行出現意外情形時,系統會自動生成一個Exception對象來通知程序。
實現原理:如果try語句塊中的業務邏輯代碼在運行時出現了異常,系統自動生成一個異常對象,該異常對象被提交給Java運行時環境,這個過程被稱爲拋出異常。當Java運行時環境收到異常對象時,會尋找處理該異常對象的catch塊,如果找到合適的catch塊並把該異常對象交給catch塊處理,這個過程被稱爲捕獲異常;如果Java運行時環境找不到捕獲異常的catch塊,則運行時環境終止,Java程序也將退出。
try語句塊後可以有多個catch塊,這是爲了針對不同異常類提供不同的異常處理方式。當系統發送不同異常情況時,系統會生成不同的異常對象,Java運行時環境就會根據該異常對象所屬的異常類來決定使用那個一個catch語句塊進行處理該異常。當Java運行時環境接受到異常對象後,會依次判斷該異常對象是否是catch塊後異常類或其子類的實例,如果是,Java運行時環境將調用該catch塊來處理該異常;否則再次拿該異常對象和下一個catch塊裏的異常類進行比較。
Java提供了豐富的異常類,下面顯示了Java常見的異常類直接的繼承關係圖:

Java把所有非正常情況分爲兩種:異常(Exception)和錯誤(Error),他們都繼承Throwable父類。
Error錯誤:一般是指虛擬機相關的問題,如系統崩潰,虛擬機出錯、動態鏈接失敗等,這種錯誤無法恢復或不可能捕獲,將導致引用程序中斷。通常應用程序無法處理這些錯誤。
注意:對程序進行異常捕獲時,一定是先捕獲小的異常,再捕獲大的異常。

訪問異常信息
如果程序需要在catch代碼塊中訪問異常對象的相關信息,可以通過調用catch語句塊中的異常形參的方法來獲取異常信息,當Java運行時決定調用某個catch語句塊來處理該異常對象時,會將該異常對象賦給catch塊後的異常參數,程序就可以通過該參數來獲得異常的相關信息。
異常對象常用的幾個方法:
(1)getMessage():返回該異常的詳細描述字符串。
(2)printStackTrace():將該異常的跟蹤棧信息輸出到標準錯誤輸出。
(3)printStackTrace(PrintStream s):將該異常信息的跟蹤棧信息輸出到指定輸出流。
(4)getStackTrace():返回該異常的跟蹤棧信息。

使用finally回收資源
Java異常處理的完整語法結構是
try {
//業務代碼(可能報異常的代碼)
} catch (NullPointerException e) {
// 異常處理塊1
}catch(Exception e2){
//異常處理塊2
}finally{
//資源回收塊
}
finally語句塊主要作用是回收資源,比如:關閉數據庫連接,網絡連接,磁盤文件,輸入輸出流等等。這些資源必須顯示的回收,Java的垃圾回收機制不會回收任何物理資源,它只回收堆內存中對象所佔用的內存。
無論try語句塊中的代碼是否出現異常,也不管catch塊中的代碼是否執行,finally中的代碼塊都會被執行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章