Throwable
├── Error // 嚴重錯誤,程式無法恢復 (OOM, StackOverflow)
└── Exception // 可處理的異常情況
├── RuntimeException // 運行時異常 (非受檢)
│ ├── NullPointerException
│ ├── IndexOutOfBoundsException
│ └── IllegalArgumentException ...
└── 編譯時異常 (Checked Exception) // 受檢異常
├── IOException
├── SQLException
├── ClassNotFoundException
└── InterruptedException ...
| 異常類型 | 是否必須聲明 throws | 是否必須捕獲處理 | 典型場景 |
|---|---|---|---|
| Error | 否 | 否 (通常不捕獲) | JVM 層面嚴重故障 |
| RuntimeException | 否 (可選) | 否 (可選) | 邏輯錯誤、空指針、越界 |
| 編譯時異常 | 是 | 是 | I/O、資料庫、反射、網絡 |
Checked Exception,強制調用者處理。RuntimeException (如 IllegalArgumentException),讓其冒泡到全局異常處理器。AutoCloseable 的資源,簡化編譯時異常處理。Error 不管,Runtime 隨緣,Checked 必須管——聲明或捕獲,二選一。
掌握異常分類與處理義務,是寫出健壯 Java 代碼的基本功。