Java-Exception與RuntimeException

丿似锦發表於2024-10-11

💖簡介

📖Exception

Exception 類是所有非致命性異常的基類。這些異常通常是由於程式設計邏輯問題或外部因素(如檔案不存在、網路連線失敗等)導致的,可以透過適當的程式設計手段來恢復或處理。Exception 可以進一步分為兩大類:

  1. Checked Exceptions(受檢異常): 這些異常必須在程式碼中顯式地宣告或捕獲。它們通常表示可以預見的問題,比如 IOExceptionSQLException。如果一個方法丟擲這樣的異常,那麼呼叫該方法的方法要麼捕獲這個異常,要麼也宣告丟擲這個異常(try catchthrow)。
  2. Unchecked Exceptions(非受檢異常): 也稱為 RuntimeException。這類異常不需要在方法簽名中宣告,也不需要強制捕獲。它們通常表示程式設計錯誤,比如陣列越界訪問(ArrayIndexOutOfBoundsException)、空指標異常(NullPointerException)等。

📖RuntimeException

RuntimeExceptionException 的子類,用於表示那些在正常情況下不應該發生的錯誤。

常見的 RuntimeException 子類包括:

  • NullPointerException
  • ArrayIndexOutOfBoundsException
  • IllegalArgumentException
  • ClassCastException
  • ArithmeticException

🌟自定義異常選擇

在自定義異常時根據所需進行extends

📖繼承 Exception(受檢異常)

  • 預期且可恢復:如果你認為這個異常是程式正常流程中可以預見的情況,並且呼叫者可以透過某種方式恢復或應對這種情況。
  • 強制處理:因為受檢異常必須被方法簽名宣告或者被捕獲,這可以確保呼叫者不會忽略這種異常。這對於那些可能導致嚴重問題但又不是程式設計錯誤的情況非常有用。
  • 外部因素:如果異常通常是由於外部環境或輸入資料引起的(如檔案不存在、網路連線失敗等),通常應該使用受檢異常。

📖繼承 RuntimeException(非受檢異常)

  • 程式設計錯誤:如果異常表示的是一個不應該發生的程式設計錯誤,比如非法引數傳遞、空指標訪問等。
  • 不強制處理:非受檢異常不需要在方法簽名中宣告,也不需要強制捕獲。這意味著你可以更靈活地編寫程式碼,而不需要在每個可能丟擲異常的地方都進行顯式的異常處理。
  • 內部邏輯錯誤:如果異常是由於內部邏輯錯誤導致的,而且這種錯誤應該透過修改程式碼來解決,而不是透過捕獲和處理異常,那麼應該使用非受檢異常。

⭐總結

  • 如果異常代表的是程式執行中的合理情況,並且希望呼叫者必須處理這種情況,那麼選擇繼承 Exception
  • 如果異常是由程式設計錯誤引起,並且不希望強制呼叫者處理它,那麼選擇繼承 RuntimeException

⚡自定義異常及統一異常處理

SpringBoot統一異常處理


結束

相關文章