Java 例外處理機制是建構健壯程式的基石。本文系統整理 try-catch-finally 流程控制、多重捕獲順序、執行期與檢查型例外差異,並說明 JBuilder 除錯輔助功能。
int x = (int)(Math.random()*5);
int y = (int)(Math.random()*10);
int[] z = new int[5];
try {
System.out.println("y/x =" + (y/x)); // 可能 ArithmeticException
System.out.println("z[y] =" + z[y]); // 可能 ArrayIndexOutOfBoundsException
}
catch (ArithmeticException ex1) {
System.out.println("算術運算異常:" + ex1.getMessage());
}
catch (ArrayIndexOutOfBoundsException ex2) {
System.out.println("數據越界異常:" + ex2.getMessage());
}
catch 區塊執行處理邏輯。try-catch 結構之後的語句。ArithmeticException、ArrayIndexOutOfBoundsException 屬 非檢查型例外 (RuntimeException 子類),編譯器不強制捕獲;若為檢查型例外 (如 IOException) 則必須捕獲或宣告拋出。
try {
// 高風險操作
}
catch (SomeException e) {
// 處理
}
finally {
// 清理資源:關閉檔案、釋放連線、釋放鎖
// 無論 try 是否拋出例外、catch 是否處理、甚至 catch 內再拋出例外,finally 都會執行
}
finally 區塊本身拋出未捕獲例外。Thread.stop() 強制終止 (已淘汰)。System.exit() 終止 JVM。
try { ... }
catch (GrandchildException e1) { ... } // 最具體
catch (ChildException e2) { ... } // 中間
catch (ParentException e3) { ... } // 最一般
繼承鏈:GrandchildException → ChildException → ParentException。
規則:越具體(子類)的 catch 必須寫在越前面,否則編譯錯誤 ("exception already caught")。這確保精確處理優先於通用處理。
IllegalArgumentException)。catch (Exception e) 吞沒錯誤資訊。finally 釋放資源:或使用 Java 7+ try-with-resources 自動關閉 AutoCloseable。throw new BusinessException("msg", cause) 保留 cause。log.error("context", e) 而非 e.printStackTrace()。掌握例外流程控制,配合 JBuilder 除錯工具,能大幅縮短除錯週期,提升程式碼健壯度。