【Java學習筆記】異常處理
- Java異常概念
- java異常的分類
異常的捕獲和處理
- 是指在執行期出現的錯誤
- 觀察錯誤的名字和行號最重要
異常的概念
- Java異常是Java提供的用於處理程式中錯誤的一種機制。
- 所謂錯誤是指在程式執行的過程中發生的一些異常事件(如:除0溢位,陣列下標越界,所要讀取的檔案不存在)。
- 設計良好的程式應該在異常發生時提供處理這些錯誤的方法,使得程式不會因為異常的發生而阻斷或產生不可預見的結果。
- Java程式的執行過程中出現異常事件,可以生成一個異常類物件,該異常物件封裝了異常事件的資訊並被提交給Java執行時系統,這個過程稱作丟擲(throw)異常。
- 當Java執行時系統接收到異常物件時,會尋找能處理這一異常的程式碼並把當前異常物件交給其處理,這一過程稱為捕獲(catch)異常。
public class TestEx {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
try {
System.out.println(2/0);
} catch (ArithmeticException e) {
e.printStackTrace();
}
}
}
public void someMethod() throws SomeException {
if (someConition()) {
throw new SomeException("錯誤原因");
}
}
try {
someMethod();
} catch (SomeException e) {
//異常處理程式碼;
}
異常的分類
- J2SDK中定義了很多異常類,這些類對應了各種各樣可能出現的異常事件。
Error:稱為錯誤,由Java虛擬機器生成並丟擲,包括動態連結失敗、虛擬機器錯誤等,程式對其不做處理。
Exception:所有異常類的父類,其子類對應了各種各樣可能出現的異常事件,一般需要使用者顯示的宣告或捕獲。
Runtime Exception:一類特殊的異常,如被0除、陣列下標超範圍等,其產生比較繁瑣,處理麻煩,如果顯示的宣告或捕獲將會對程式可讀性和執行效率影響很大。因此由系統自動檢測並將它們交給預設的異常處理程式(使用者可不必對其處理)。
異常的捕獲和處理
try {
//可能丟擲的異常的語句
} catch (SomeException1 e)
{
... ... ...
} catch (SomeException2 e)
{
... ... ...
} finally { ... ... ... }
try語句
- try{…}語句指定了一段程式碼,該段程式碼就是一次捕獲並處理例外的範圍。
- 在執行過程中,該段程式碼可能會產生並丟擲一種或者幾種型別的異常物件,它後面的catch語句要分別對這些異常做相應的處理。
- 如果沒有例外產生,所有的catch程式碼段都被略過不執行。
catch語句
- 在catch語句塊中是對異常進行處理的程式碼,每個try語句塊可以伴隨一個或多個catch語句,用於處理可能產生的不同型別的異常物件。
- 在catch中宣告的異常物件(catch(SomeException e))封裝了異常事件發生的資訊,在catch語句塊中可以使用這個物件的一些方法獲取這些資訊。
- 例如:
- getMessage()方法,用類得到有關異常事件的資訊。
- printStackTrace()方法,用來跟蹤異常事件發生時執行堆疊的內容。
finally語句
- finally語句為異常處理提供一個統一的出口,使得在控制流程轉到程式的其他部分以前,能夠對程式的狀態作統一的管理。
- 無論try所指定的程式塊中是否丟擲異常,finally所指定的程式碼都要被執行。
- 通常在finally語句中可以進行資源的清理工作,如:
- 關閉開啟的檔案
- 刪除臨時檔案