異常處理機制(二)之異常處理與捕獲

小亮愛編碼發表於2023-11-14

一、異常概述

1 Error(錯誤):
是指程式無法處理的錯誤,表示執行應用程式時比較嚴重的問題。大多數錯誤與程式碼編寫者執行的操作無關,而表示程式碼執行時JVM(Java 虛擬機器)出現的問題。
2 異常(Exception):
是指在程式執行時由於程式處理邏輯上的錯誤而導致程式中斷的一種指令流。通俗的說,就是程式設計師寫的程式碼錯誤。
兩者的區別:錯誤無法處理,異常可以被程式本身處理。
image

二、異常分類

異常可以分為編譯時異常和執行時異常兩種型別。

編譯時異常:都是Exception類及其子類,必須顯式(手動處理),否則程式就會發生錯誤,無法透過編譯。

執行時異常:都是RuntimeException類及其子類,無需顯式處理(手動處理),也可以和編譯時異常一樣處理。

常見的執行時異常:

    NullPointerException 空指標異常
    ArithmeticException 數學運算異常
    ArrayIndexOutOfBoundsException 陣列下標越界異常
    ClassCastException 型別轉換異常
    NumberFormatException 數字格式不正確異常

常見的編譯異常:

    SQLException 運算元據庫時,查詢表可能發生異常
    IOException 操作檔案時發生的異常
    FileNotFoundException 當操作一個不存在的檔案時,發生異常
    ClassNotFoundException 載入類,但是該類不存在時,發生異常
    EOFException 操作檔案,到檔案末尾,發生異常
    IllegalArguementException 非法引數異常

三、異常的處理

異常捕獲指在程式執行過程中,發生了一些不可預測的錯誤或異常,需要對這些錯誤或異常進行捕獲和處理的過程。在程式設計中,我們可以使用 try-catch-finally 語句塊來進行異常捕獲。

  • try:將可能會出錯的程式碼放入 try 塊中。
  • catch:當 try 塊中的程式碼出現異常時,程式會跳轉到 catch 塊去處理異常,防止程式崩潰。
  • finally:不管 try 塊中的程式碼是否正常執行,finally 塊中的程式碼都會被執行,通常用來釋放資源。

以下是一個簡單的異常處理和捕獲的例子:

try {
    // 可能會丟擲異常的程式碼塊
} catch (ExceptionType1 e1) {
    // 處理特定型別的異常1
} catch (ExceptionType2 e2) {
    // 處理特定型別的異常2
} finally {
    // 必須執行的程式碼塊
}

在上面的程式碼中,try塊中的程式碼可能會丟擲異常。如果丟擲了ExceptionType1型別的異常,將跳轉到第一個catch塊中處理它。如果丟擲了ExceptionType2型別的異常,將跳轉到第二個catch塊中處理它。無論是否出現異常,finally塊中的程式碼都將執行。

需要注意的是,在Java中,異常處理應該儘可能地處理所有可能的異常,並且應該總是使用try-catch-finally塊,即使程式碼中出現了Unchecked Exception。這樣可以確保程式的穩定性和可靠性。