| 關鍵字 | 類別 | 作用對象 | 核心含義 |
|---|---|---|---|
final | 修飾符 | 類、方法、變量、參數 | 不可變/不可繼承/不可覆寫 |
finally | 異常處理塊 | try-catch 結構 | 無論是否拋出異常,代碼必定執行(除非 JVM 退出) |
finalize | Object 方法 | 對象實例 | GC 回收前調用,用於釋放非記憶體資源(不推薦,已棄用) |
String, Integer)。try {
return 1; // 先計算返回值,暫存
} finally {
System.out.println("清理資源"); // 必定執行
// return 2; // 若這裡 return,會覆蓋外層返回值(惡習)
}
不執行 finally 的極端情況:System.exit(0)、JVM Crash、死循環導致線程無法到達、守護線程在非守護線程結束後被強制終止。
finalize 的對象需進入 Finalizer 佇列,由專門線程處理,增加 GC 壓力。finalize 拋出的異常會被忽略,導致對象處於破損狀態。Cleaner/PhantomReference 管理非堆資源。// 現代最佳實踐
try (FileInputStream fis = new FileInputStream("file.txt")) {
// 使用資源
} // 自動調用 close(),即使拋出異常也保證執行