初學者習慣 try-catch-finally 或 try-catch,但 Java 允許 try { ... } finally { ... } 省略 catch。這看似反直覺,實則有明確用途。
try {
// 可能拋出異常的業務代碼
doRiskyOperation();
} finally {
// 清理資源:關閉流、釋放鎖、歸還連接池等
cleanupResources();
}
Lock.lock() 後在 finally 中 unlock(),防止死鎖。| 寫法 | 異常處理 | finally 執行 | 適用場景 |
|---|---|---|---|
| try-catch-finally | 捕獲並處理 | 是 | 需在當下處理異常邏輯 |
| try-finally | 不捕獲,向上拋出 | 是 | 只負責資源清理,異常交給上層 |
Java 7+ 推薦使用 try-with-resources 自動管理實作 AutoCloseable 的資源,程式碼更簡潔:
try (FileInputStream fis = new FileInputStream("data.txt")) {
// 使用 fis
} // 編譯器自動生成 finally 關閉 fis
若資源不支援 AutoCloseable,或需執行自定義清理邏輯,try-finally 仍是標準做法。記住:「有些例外可以撒手不管,但 finally 的底線必須守住。」