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

Java 異常處理核心知識:體系結構、分類、常用方法與最佳實踐

     編輯:Java 綜合教學

什麼是異常?

程序運行期間出現的違背預期事件,導致正常流程中斷。來源包括:用戶輸入無效、資源缺失(文件/網絡)、資源耗盡(OOM)、空指針解引用等。

異常三大類別

類別代表特點處理策略
檢查異常
(Checked Exception)
IOException, SQLException編譯期強制捕獲/拋出,外部環境導致,可預期可恢復try-catch 處理或 throws 向上拋,調用者必須處理
運行時異常
(Runtime Exception)
NullPointerException, IndexOutOfBoundsException, IllegalArgumentException編譯期不檢查,邏輯錯誤導致,本可避免修正代碼邏輯(非空判斷、邊界檢查),一般不捕獲
錯誤
(Error)
OutOfMemoryError, StackOverflowErrorJVM 層面嚴重問題,應用無法恢復不捕獲,記錄日誌後讓程序崩潰,排查根因

異常繼承體系

Throwable
├── Error              // 嚴重錯誤
└── Exception          // 異常
    ├── RuntimeException   // 非檢查異常
    │   ├── NullPointerException
    │   ├── IllegalArgumentException
    │   └── ...
    └── IOException        // 檢查異常
        ├── FileNotFoundException
        └── ...
    └── SQLException       // 檢查異常

Throwable 核心方法

方法說明
getMessage()返回構造器傳入的詳細信息
getCause()返回導致此異常的根因(鏈式異常)
toString()類名 + ": " + getMessage()
printStackTrace()輸出堆棧軌跡至 System.err(含原因鏈)
getStackTrace()返回 StackTraceElement[],可程序化分析

捕獲與拋出最佳實踐

  1. 具體捕獲:捕獲具體子類,避免 catch (Exception e) 吞噬異常。
  2. 早拋出、晚捕獲:底層拋出,業務層統一處理/轉換為業務異常。
  3. 異常鏈保留:throw new BizException("msg", cause),保留根因堆棧。
  4. 資源關閉:JDK7+ try-with-resources 自動關閉 AutoCloseable。
  5. 不作控制流:異常開銷大,不用於常規流程控制(如循環結束)。
  6. 日誌記錄:log.error("msg", e) 而非 e.printStackTrace()。

自定義異常模板

public class BizException extends RuntimeException {
    private final int code;
    public BizException(int code, String msg) { super(msg); this.code = code; }
    public BizException(int code, String msg, Throwable cause) { super(msg, cause); this.code = code; }
    public int getCode() { return code; }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved