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

Java 異常處理深度指南:體系架構、最佳實踐、誤用避坑與資源清理模式

     編輯:Java 綜合教學

Java 異常處理深度指南:體系架構、最佳實踐、誤用避坑與資源清理模式

異常體系總覽

Throwable
├── Error              // JVM 級嚴重錯誤,不捕獲(OOM、StackOverflow)
└── Exception
    ├── RuntimeException (Unchecked)  // 編程 Bug,可不處理(NPE、IndexOutOfBounds)
    └── Checked Exception             // 外部風險,強制處理(IOException、SQLException)

核心用法演示

1. try-catch-finally 流程控制

try {
    System.out.println(ints[4]); // 拋出 IndexOutOfBoundsException
    System.out.println("我還有幸執行到嗎"); // 不會執行
} catch (IndexOutOfBoundsException e) {
    System.out.println("數組越界錯誤");
} finally {
    System.out.println("異常出現後"); // 必定執行
}
// 輸出:異常出現前 → 數組越界錯誤 → 異常出現後

無 try-catch 時,異常直接沿調用棧拋出,後續代碼不再執行。

2. 異常重新拋出

try {
    new BufferedInputStream(new FileInputStream(file));
} catch (FileNotFoundException e) {
    e.printStackTrace();
    throw e; // 原封不動拋給上層,保持堆棧軌跡
}

3. 異常鏈保留原始原因

try { f(); }
catch (ExceptionB e) {
    ExceptionC c = new ExceptionC("新異常");
    c.initCause(e); // 關鍵:建立因果鏈
    throw c;
}
// 輸出包含 "Caused by: ExceptionB",便於根因定位

4. 資源安全關閉模式

模式一:try-finally(JDK 6 及之前)

BufferedReader reader = null;
try {
    reader = new BufferedReader(new FileReader(file));
    // 業務邏輯
} finally {
    if (reader != null) try { reader.close(); } catch (IOException ignore) {}
}

模式二:try-with-resources(JDK 7+ 推薦)

try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
    // 業務邏輯
} // 編譯器自動生成 finally 關閉資源,支援多資源

構造器開啟資源場景:提供 dispose() 方法,調用方負責在 finally 中調用。

五大誤用避坑指南

  1. 捕獲 Exception/Throwable 大而全之:掩蓋真實錯誤類型,難以定位。原則:捕獲具體異常。
  2. 只打印堆棧不處理:e.printStackTrace() 非業務處理。原則:記錄上下文、拋轉業務異常、或實際恢復。
  3. try 塊過大:混雜無關代碼,導致異常來源模糊。原則:最小化 try 範圍,針對性捕獲。
  4. 吞沒異常:catch (Exception e) {} 空塊。嚴禁,至少記錄日誌。
  5. 用異常控制業務流程:效能差、可讀性低。原則:異常僅用於「異常」情況。

設計原則

  • 可恢復 → Checked Exception(呼叫方必須處理)。
  • 不可恢復/編程錯誤 → RuntimeException(快速失效)。
  • 異常訊息包含:預期值、實際值、合法範圍、修正建議。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved