首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 異常處理與斷言完整指南:從入門到最佳實踐

     編輯:Java 綜合教學

Java 異常處理與斷言完整指南:從入門到最佳實踐

一、異常處理核心機制

1.1 為什麼需要異常處理?

傳統 C 風格錯誤處理存在三大缺陷:程式設計師易忽略錯誤檢查、主邏輯與錯誤處理混雜導致可讀性差、錯誤處理常被遺忘。Java 透過編譯器強制機制、try-catch-finally 結構分離主邏輯與錯誤處理、方法簽名聲明異常(throws)三大特性徹底解決這些問題。

1.2 異常處理三步驟

  1. 聲明異常:方法簽名使用 throws 宣告可檢查異常(Checked Exception)。
  2. 拋出異常:方法體內使用 throw new ExceptionType() 建立並拋出異常物件。
  3. 捕獲異常:呼叫端使用 try-catch 或 try-catch-finally 處理,或繼續向上拋出(throws)。

1.3 方法呼叫堆疊與異常傳播

JVM 維護先進後出的方法呼叫堆疊。異常發生時,建立包含型別與程式狀態的 Exception 物件,沿堆疊向上尋找匹配的 catch 區塊。若全程未捕獲,JVM 終止程式並列印堆疊追蹤。

1.4 異常類別體系

java.lang.Throwable
├── java.lang.Error          // 系統內部錯誤(虛擬機錯誤、連結錯誤),不可恢復
└── java.lang.Exception      // 程式異常,可捕獲處理
    ├── RuntimeException     // 非受檢異常:邏輯錯誤(空指標、越界、除零),應修正程式而非捕獲
    └── 其他 Exception 子類  // 受檢異常:外部資源錯誤(IO、SQL、網路),必須捕獲或聲明

1.5 try-catch-finally 完整語義

  • try:主邏輯區塊,至少需一個 catch 或 finally。
  • catch:按順序匹配異常型別,**子類必須前於父類**;可用 printStackTrace()、getMessage()、toString() 獲取資訊。
  • finally:**無論是否發生異常皆執行**(除非 System.exit() 或 JVM 崩潰),適用於資源清理(關閉檔案、釋放連線)。

1.6 常見異常類別速查

異常觸發場景類別
ArrayIndexOutOfBoundsException陣列索引越界RuntimeException
NullPointerException使用 null 參考RuntimeException
NumberFormatException字串轉數字失敗RuntimeException
ClassCastException型別轉換失敗RuntimeException
FileNotFoundException檔案不存在IOException (Checked)
IllegalArgumentException方法參數非法RuntimeException

1.7 自訂異常最佳實踐

  • 繼承 Exception(受檢)或 RuntimeException(非受檢)。
  • 提供建構子:MyException()、MyException(String msg)、MyException(String msg, Throwable cause)。
  • 命名以 Exception 結尾,遵循 JDK 慣例。

二、斷言機制

2.1 語法與啟用

assert booleanExpression;                    // 簡單形式
assert booleanExpression : errorMessageExpr; // 帶訊息形式

// 編譯:javac AssertDemo.java
// 執行(啟用斷言):java -ea AssertDemo
// 執行(停用斷言,預設):java AssertDemo

2.2 適用場景

  • 內部不變量:驗證私有方法前置/後置條件、物件狀態約束(如 isValid())。
  • 控制流不變量:switch-default 分支理論上不可達處放置 assert false。
  • 開發/測試階段驗證:生產環境預設停用,零效能損耗。

2.3 禁忌:public 方法參數驗證

絕不可用斷言檢查 public 方法參數,因生產環境斷言關閉會導致驗證失效。應使用 if-else 拋出 IllegalArgumentException。

2.4 斷言 vs 異常

維度斷言異常
目的驗證程式假設、文檔化不變量處理運行時錯誤、外部資源失效
啟用控制JVM 參數 -ea/-da永遠啟用
適用對象內部邏輯、私有方法、測試代碼公共 API、IO 操作、使用者輸入
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved