| 關鍵字 | 類型 | 核心作用 | 所屬層面 |
|---|---|---|---|
final | 修飾符 | 不可變/不可繼承/不可覆寫 | 語法/編譯期 |
finally | 程式碼區塊 | 異常處理後必執行清理邏輯 | 執行流程/運行期 |
finalize() | Object 方法 | GC 回收前執行資源釋放 | 記憶體管理/GC |
final int A = 10; int b = A + 5; → 編譯期直接優化為 15public void method(final int param) {
// param = 20; // 編譯錯誤
}
public void method(final List<String> list) {
list.add("hello"); // ✅ 允許修改物件內容
// list = new ArrayList<>(); // ❌ 禁止重新指派參考
}
用途:防止方法內部意外重新指派參考,文檔化意圖。
private 方法隱性 final)String、Integer、Math)try {
// 高風險操作
FileInputStream fis = new FileInputStream("data.txt");
// ...
} catch (FileNotFoundException e) {
// 處理異常
} finally {
// 無論 try 是否拋出異常、catch 是否處理、是否有 return,
// finally 都會執行(除非 JVM 退出 System.exit())
if (fis != null) fis.close(); // 資源清理
}
try-catch-finally:catch 處理後執行 finallytry-finally(無 catch):異常拋給呼叫者,finally 先執行return 在 try/catch 中 → finally 仍執行,且可能覆蓋返回值@Deprecated(since="9")
protected void finalize() throws Throwable {
try {
// 釋放原生資源:檔案控制代碼、Socket、JNI 記憶體等
} finally {
super.finalize();
}
}
try (Resource r = ...) { } 自動調用 AutoCloseable.close()Cleaner.create().register(obj, cleaningAction) 替代 finalizefinal — 定義「不變」:常數、封印類、禁覆寫 finally — 保證「必執行」:關流、釋鎖、善後 finalize — 過時「清理」:GC 前夕,慎用棄用