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

Java 捕獲所有異常的技巧與 Exception 核心方法詳解

     編輯:Java 相關知識

在 Java 異常處理中,有時需要一個「安全網」捕獲所有可能的異常。透過捕獲基底類別 Exception 即可達成,但須注意順序與資訊提取技巧。本文將說明捕獲所有異常的正確寫法、Throwable 提供的核心診斷方法,並附上完整範例輸出。

捕獲所有異常:catch (Exception e)

Exception 是幾乎所有應用層異常的共同父類(Error 除外)。寫法如下:

try {
    // 可能拋出各種異常的程式碼
} catch (Exception e) {
    System.out.println("caught an exception");
    // 處理邏輯
}

關鍵規則:此捕獲區塊必須置於所有具體異常捕獲之後,否則後續的 catch (IOException e) 等將永遠無法執行(被父類別攔截)。

Exception/Throwable 核心診斷方法

捕獲到 Exception e 後,可透過繼承自 Throwable 的方法提取詳細資訊:

方法回傳值用途
getMessage()String取得詳細錯誤訊息(建構子傳入的字串)
toString()String簡短描述:類別名 + 冒號 + 訊息(若有)
printStackTrace()void印出完整堆疊追蹤至標準錯誤輸出 (System.err)
printStackTrace(PrintStream s)void印出至指定串流(如 System.out 便於重導向)
getCause()Throwable取得導致此異常的原始原因(異常鏈)
getStackTrace()StackTraceElement[]程式化存取堆疊框架,適合自訂日誌格式

此外,繼承自 Object 的 getClass() 可取得異常的確切執行期類別,配合 getName() 可動態判斷型別。

完整範例:方法輸出對比

public class ExceptionMethods {
    public static void main(String[] args) {
        try {
            throw new Exception("Here's my Exception");
        } catch (Exception e) {
            System.out.println("Caught Exception");
            System.out.println("e.getMessage(): " + e.getMessage());
            System.out.println("e.toString(): " + e.toString());
            System.out.println("e.printStackTrace():");
            e.printStackTrace();
        }
    }
}

執行輸出:

Caught Exception
e.getMessage(): Here's my Exception
e.toString(): java.lang.Exception: Here's my Exception
e.printStackTrace():
java.lang.Exception: Here's my Exception
    at ExceptionMethods.main(ExceptionMethods.java:7)

觀察可見:getMessage() 僅回傳訊息字串,toString() 包含類別名,printStackTrace() 則提供完整呼叫堆疊,資訊層層遞增。

進階技巧:導向 System.out 便於重導向

Windows 環境下 System.err 難以重導向至檔案。建議使用:

e.printStackTrace(System.out);  // 或 new PrintStream(new File("error.log"))

捕獲 Throwable 的風險

若寫 catch (Throwable t) 會連 Error(如 OutOfMemoryError)也捕獲,通常不建議,除非在頂層框架做最後防禦性記錄。捕獲 Exception 已涵蓋 99% 應用層需求。

最佳實務摘要

  1. 順序正確:具體異常 catch 在前,catch (Exception e) 在後
  2. 勿吞沒異常:至少記錄 e.printStackTrace() 或 log.error("", e)
  3. 善用 getMessage():給使用者看的友善訊息;toString()/堆疊給開發者除錯
  4. 考慮重新拋出:若無法妥善處理,throw e 或包裝後拋出,交由上層統一處理

熟練運用 Exception 捕獲與 Throwable 診斷方法,能讓你的錯誤處理既全面又資訊豐富。

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