Java 的例外處理 Exception Handling

作者 | 2017-12-27

Exception Handling例外處理,是現代程式語言處理程式執行過程中,可能發生問題(或者錯誤)時的一種較有效率的方法。

在過去,程式開發人員常花時間在撰寫「檢查錯誤」的相關程式碼,最主要原因是,當程式碼執行過程中,若發生「錯誤(Error)」時,將會中斷整個軟體的執行,造成程式無法繼續往下執行。

現代語言以「預先認定」某些程式片段(或執行某特定方法)可能出現 Exception-例外,若事先因為認定其會發生例外,就要求在設計過程中一定要將處理例外情形的程式碼預先撰寫設計好,當執行過程中真的產生例外時,會按照事先設計的程式碼來處理例外,程式也能正常的繼續執行。

例外區塊

Java 語言使用 try…catch 的區塊做為例外處理的機制,try 區塊用來監控預先認定會出現例外的程式碼,catch 區塊則是用來放置當例外真的在 try 區塊出現時,所設計並處理例外的程式碼:

例如使用 FileReader 類別讀取一個檔案時,檔案有可能因為不存在或檔案系統出問題而出現例外,所以得要使用 try…catch 區塊來預先處理例外的發生,如下列範例程式碼:

當 try 區塊中有多行程式時,當某行程式在執行時出現例外,將忽略後續的程式碼而跳至例外的專屬 catch 區塊去執行,執行完成後將往後執行 catch 區塊後的一般程式碼,執行順序如下圖:

若 try 區塊內的程式碼,有可能出現一種以上的例外,可以重覆 catch 區塊,以處理不同種類的例外:

在 try…catch 區塊使用時,有時會在最後加上 finally 區塊,不論在 try 區塊內的程式碼是否有出現例外,或是出現例外跳至 catch 區塊執行,finally 區塊內的程式碼都會被執行。一般在開發程式時,會在 finally 區塊中撰寫如關閉檔案或串流物件的程式碼,目的是清理資源。

往上層拋出例外

當例外出現時也可以選擇當例外出現時不處理,而讓例外往上層呼叫來源拋出,最後如果都沒有處理這個例外,則會在執行過程中被 Java 虛擬機器抓到,而中斷程式的執行。Java使用 throws 不處理而拋出例外,throws 必需使用在方法的定義時,也就是方法的第一行,用法如下方程式碼所示:

因為 main 方法中使用了 FileReader 類別建構一個物件(第3行),由於檔案有可能因為不存在或檔案系統出問題而出現 FileNotFoundException 這個找不到檔案的例外,但又未用 try…catch 區塊處理,因此必需要在這個方法定義拋出例外,此程式才能成功編譯。

例外類別

在 Java 中,所有被拋出的例外都是物件,並不是每個物件都能隨意的當做例外來拋出,必需是 java.lang.Throwable 家族的物件才能被拋出,而 Throwable 有兩個主要的子類別,一個是 Exception 類別,另一個是 Error 類別,常用例外類別的架構如下圖:

 

相關文章:

Category: Java 標籤:, , , ,

關於 Hank Tom

專長為程式語言、雲端服務開發,Linux系統管理, 任職:利拓科技 技術長,海林行動科技 技術總監 輔仁大學 兼任助理教授 , 為 Android高效入門>深度學習、CentOS 7建置、管理與伺服器架設實戰、Java網路程式設計、雲端網頁程式設計-Google App Engine應用實作 等書作者

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *