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

Java 異常處理完整指南:異常體系、捕獲處理、自定義異常、最佳實踐

     編輯:Java 綜合教學

Java 異常處理完整指南:異常體系、捕獲處理、自定義異常、最佳實踐

異常是程序運行過程中發生的非正常情況。Java 通過完善的異常體系提供統一錯誤處理機制。本文系統梳理異常分類、層次結構、核心方法、捕獲語法、自定義異常及實戰最佳實踐。

異常三大分類

異常繼承體系

Throwable
├── Error                 // 錯誤:系統級,不處理
└── Exception             // 異常:程序級
    ├── RuntimeException  // 運行時異常(非檢查性)
    │   ├── NullPointerException
    │   ├── IllegalArgumentException
    │   └── ...
    └── IOException       // 檢查性異常
    ├── SQLException
    ├── ClassNotFoundException
    └── ...

異常體系圖

Throwable 核心方法

類別特點處理要求典型例子
檢查性異常編譯期檢查,外部因素導致強制 try-catch 或 throwsIOException、SQLException
運行時異常邏輯錯誤,可通過代碼避免編譯期不強制NullPointerException、ArrayIndexOutOfBoundsException
錯誤JVM/系統級故障,不可恢復一般不捕獲OutOfMemoryError、StackOverflowError

異常捕獲語法

try {
    // 保護代碼
} catch (ExceptionType1 e1) {
    // 處理類型1
} catch (ExceptionType2 e2) {
    // 處理類型2
} finally {
    // 清理代碼(無論是否異常都執行)
}

多重 Catch 最佳實踐

  • 子類異常在前,父類在後(否則編譯錯誤/不可達)
  • Java 7+ 多 Catch 合併:catch (IOException | SQLException e)
  • try-with-resources 自動關閉實現 AutoCloseable 的資源

throws vs throw

  • throws:方法簽名聲明拋出的檢查性異常,調用者負責處理
  • throw:主動拋出異常實例:throw new BusinessException("庫存不足")

自定義異常規範

// 業務檢查性異常
public class InsufficientFundsException extends Exception {
    private double amount;
    public InsufficientFundsException(double amount) {
        super("餘額不足,需額外: " + amount);
        this.amount = amount;
    }
    public double getAmount() { return amount; }
}

// 業務運行時異常(推薦:繼承 RuntimeException,減少 throws 傳播)
public class BusinessException extends RuntimeException {
    private int code;
    public BusinessException(int code, String msg) {
        super(msg); this.code = code;
    }
}

實戰最佳實踐

  1. 異常分層:DAO 拋 SQLException → Service 包裝為 BusinessException → Controller 統一處理返回錯誤碼
  2. 不吞沒異常:catch 後至少記錄日志,或包裝重拋
  3. 提供上下文:自定義異常攜帶關鍵業務數據(訂單ID、用戶ID)
  4. 避免流程控制用異常:異常開銷大,業務判斷用條件語句
  5. finally 清理資源:或用 try-with-resources
  6. 全局異常處理:Spring @ControllerAdvice + @ExceptionHandler 統一返回 JSON 錯誤

常見內置異常速查

方法說明
getMessage()詳細錯誤信息
getCause()根因異常
toString()類名 + 信息
printStackTrace()打印堆棧到 System.err
getStackTrace()獲取 StackTraceElement 數組
fillInStackTrace()重新填充堆棧軌跡
異常觸發場景
NullPointerException調用 null 對象方法/字段
ArrayIndexOutOfBoundsException數組索引越界
ClassCastException強轉類型不兼容
IllegalArgumentException方法參數非法
NumberFormatException字符串轉數字失敗
ClassNotFoundException類加載失敗

總結

異常處理核心是「失敗快速、信息完整、責任清晰」。區分檢查性/運行時異常、合理自定義業務異常、分層包裝轉換、全局統一處理,構建健壯可維護的錯誤處理體系。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved