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

Java 進階:異常處理完整指南

     編輯:Java 綜合教學

Java 異常處理核心概念

在 Java 程式開發中,異常是指程式運行過程中發生的非預期事件,它會干擾正常的指令流程。並非所有錯誤都是異常,錯誤有時可避免(如語法錯誤),而異常則是在運行時發生的問題,例如除以零、文件不存在、網絡中斷等。

異常的三大類型

  • 受檢異常:編譯器強制要求處理的異常,通常由外部因素引起(如文件不存在),程式員無法預見。必須使用 try-catch 捕獲或 throws 拋出。
  • 運行時異常:屬於 RuntimeException 及其子類,通常由程式邏輯錯誤導致(如空指針、數組越界),編譯器不強制處理,建議從邏輯上避免。
  • 錯誤:屬於 Error 及其子類,表示嚴重的系統級問題(如 JVM 內存溢出、棧溢出),程式通常無法恢復,也不應嘗試捕獲處理。

異常體系結構

Java 將所有異常視為對象,頂層父類是 java.lang.Throwable,下分兩大分支:

  • Error:嚴重錯誤,程式無法處理,JVM 通常會終止線程。
  • Exception:程式可捕獲處理的異常,再細分為運行時異常(RuntimeException)和非運行時異常(受檢異常)。

Java 異常層次結構圖

關鍵區別

Error vs Exception: Error 是災難性、致命的,程式無法控制;Exception 通常可被程式處理,且應盡可能處理。

受檢異常 vs 不受檢異常: 除 RuntimeException 及其子類和 Error 外,其他 Exception 皆為受檢異常,編譯器強制處理;不受檢異常編譯器不強制。

異常處理機制:拋出與捕獲

拋出異常

當方法無法繼續執行時,創建異常對象(new Exception()),終止當前路徑,將異常引用拋給調用棧上層,由運行時系統尋找合適的處理器。

if (stu == null) { throw new NullPointerException(); }

捕獲異常

運行時系統沿調用棧向上查找含有匹配 catch 塊的方法。若未找到,程式終止。

五大關鍵字詳解

  • try:監聽區域,包裹可能拋出異常的代碼。
  • catch:捕獲並處理特定類型的異常,可多重捕獲,按順序匹配第一個符合的。
  • finally:總會執行(除非 JVM 退出),用於釋放資源(關閉連接、流)。注意 finally 中的 return 會覆蓋 try/catch 的返回。
  • throw:在代碼中顯式拋出異常對象。
  • throws:聲明方法可能拋出的異常,用於方法簽名。

基本語法示例

try-catch 結構

try {
    // 可能拋出異常的代碼
    int a = 1, b = 0;
    System.out.println(a / b);
} catch (ArithmeticException e) {
    System.out.println("除數不能為零:" + e.getMessage());
} finally {
    System.out.println("清理資源");
}

多重捕獲與匹配原則

捕獲時按聲明順序匹配,若拋出的異常屬於 catch 參數類型或其子類,則匹配成功。建議先捕獲具體異常,再捕獲通用異常。

運行時異常自動拋出

如 ArithmeticException,無需手動 throw,JVM 會自動拋出。若不捕獲,程式將終止並打印棧跡蹤。

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