Exception Handling-例外處理,是現代程式語言處理程式執行過程中,可能發生問題(或者錯誤)時的一種較有效率的方法。
在過去,程式開發人員常花時間在撰寫「檢查錯誤」的相關程式碼,最主要原因是,當程式碼執行過程中,若發生「錯誤(Error)」時,將會中斷整個軟體的執行,造成程式無法繼續往下執行。
現代語言以「預先認定」某些程式片段(或執行某特定方法)可能出現 Exception-例外,若事先因為認定其會發生例外,就要求在設計過程中一定要將處理例外情形的程式碼預先撰寫設計好,當執行過程中真的產生例外時,會按照事先設計的程式碼來處理例外,程式也能正常的繼續執行。
例外區塊
Java 語言使用 try…catch 的區塊做為例外處理的機制,try 區塊用來監控預先認定會出現例外的程式碼,catch 區塊則是用來放置當例外真的在 try 區塊出現時,所設計並處理例外的程式碼:
例如使用 FileReader 類別讀取一個檔案時,檔案有可能因為不存在或檔案系統出問題而出現例外,所以得要使用 try…catch 區塊來預先處理例外的發生,如下列範例程式碼:
try {
FileReader br = new FileReader("data.txt");
} catch (FileNotFoundException e) {
System.out.println("檔案不存在,請檢查檔案名稱.");
}
當 try 區塊中有多行程式時,當某行程式在執行時出現例外,將忽略後續的程式碼而跳至例外的專屬 catch 區塊去執行,執行完成後將往後執行 catch 區塊後的一般程式碼,執行順序如下圖:
若 try 區塊內的程式碼,有可能出現一種以上的例外,可以重覆 catch 區塊,以處理不同種類的例外:
在 try…catch 區塊使用時,有時會在最後加上 finally 區塊,不論在 try 區塊內的程式碼是否有出現例外,或是出現例外跳至 catch 區塊執行,finally 區塊內的程式碼都會被執行。一般在開發程式時,會在 finally 區塊中撰寫如關閉檔案或串流物件的程式碼,目的是清理資源
往上層拋出例外
當例外出現時也可以選擇當例外出現時不處理,而讓例外往上層呼叫來源拋出,最後如果都沒有處理這個例外,則會在執行過程中被 Java 虛擬機器抓到,而中斷程式的執行。Java使用 throws 不處理而拋出例外,throws 必需使用在方法的定義時,也就是方法的第一行,用法如下方程式碼所示:
public class ExceptionHandling411 {
public static void main(String[] args) throws FileNotFoundException {
FileReader br = new FileReader("data.txt");
}
}