天天看點

Java -- 每日一問:談談 final、finally、 finalize 有什麼不同?

Java -- 每日一問:談談 final、finally、 finalize 有什麼不同?

典型回答

final 可以用來修飾類、方法、變量,分别有不同的意義,final 修飾的 class 代表不可以繼承擴充,final 的變量是不可以修改的,而 final 的方法也是不可以重寫的(override)。

finally 則是 Java 保證重點代碼一定要被執行的一種機制。我們可以使用 try-finally 或者 try-catch-finally 來進行類似關閉 JDBC 連接配接、保證 unlock 鎖等動作。

高手回答

  1. final

    修飾類:不可被繼承

    修飾方法:不可重寫

    修飾變量:不可修改,隻能限制引用不可以被再次指派。匿名内部類通路局部變量時需要使用 final,因為 Innerclass 實際會 copy 一份局部變量,final 可以防止出現資料一緻性問題

  2. finally:Java 保證重點代碼一定要被執行的機制,try - finally,除非在 finally 前執行了 System.exit(1)、try 中死循環、線程被殺死
  3. finalize:基礎類 Object 的一個方法,保證對象在被垃圾收集前完成特定的資源回收。由于 finalize 執行時間不确定且可能造成程式死鎖、拖慢垃圾收集等問題,Java 9 中将改方法廢棄

    優化:使用 Cleaner 配合幻想引用。