Java 異常處理機制的核心在於 java.lang.Throwable 類別及其兩大直系子類:Error 與 Exception。理解這層階層結構,是掌握 Java 錯誤處理的基石。本文將梳理標準異常體系的脈絡、關鍵類別用途,以及如何查閱官方文件掌握日益擴充的異常清單。
Throwable 是所有可被 throw 陳述式拋出的類別的共同祖先。其兩個直接子類分工明確:
OutOfMemoryError、StackOverflowError、NoClassDefFoundErrorthrows 宣告)Exception 但不繼承 RuntimeException(如 IOException、SQLException)。編譯器強制處理。RuntimeException(如 NullPointerException、IllegalArgumentException)。編譯器不強制處理。| 套件/類別 | 代表異常 | 典型觸發情境 |
|---|---|---|
java.lang | NullPointerException, ArrayIndexOutOfBoundsException, IllegalArgumentException, ClassCastException | 程式邏輯錯誤:空參考、越界、參數非法、型別轉換失敗 |
java.io | IOException, FileNotFoundException, EOFException | I/O 操作失敗:檔案不存在、讀寫錯誤、流意外結束 |
java.net | SocketException, UnknownHostException, ConnectException | 網路通訊異常:連線失敗、主機名解析失敗、Socket 錯誤 |
java.sql | SQLException, SQLSyntaxErrorException | 資料庫操作錯誤:SQL 語法錯誤、連線中斷、資料完整性違規 |
java.util | NoSuchElementException, ConcurrentModificationException | 集合操作異常:迭代器無元素、並發修改檢測 |
Java 標準庫隨版本持續新增異常類別,死記名單無意義。建議採取:
java.lang.Exception 頁面的「Direct Known Subclasses」列出所有直系子類,可遞迴探索完整階層。java.io.IOException)即揭示其所屬功能域,比單看類別名更有資訊量。cause)、try-with-resources 自動關閉資源等機制,比記住上百個異常名稱實用得多。建立自訂異常時,應依據錯誤性質選擇繼承鏈:
Exception(已檢查)RuntimeException(未檢查)BusinessException extends Exception、ValidationException extends BusinessException)熟悉標準異常體系不僅能讓你精準捕獲與拋出異常,更能在設計 API 時提供符合 Java 慣例的錯誤處理契約。