1. 程式人生 > >基礎 | final、finally與finalize

基礎 | final、finally與finalize

Java中的final關鍵字異常處理中的finally程式碼塊和Object類中的finalize()方法都是比較基礎且重要的部分,面試時也經常被問到「final、finally與finalize的區別」,務必重點關注。


談談final、finally與finalize的區別?

參考答案:

關鍵字final表示「最終的」,可用來修飾類、屬性和方法.

  • 修飾類:表示該類不能被繼承,以提高程式的安全性和可讀性,如String、System、StringBuffer類等。
  • 修飾方法:表示方法不能被重寫,如Object類的getClass方法。
  • 修飾屬性:表示變數一次賦值以後值不能被修改(常量),其名稱通常大寫。

finally關鍵字是對Java異常處理模型的最佳補充。無論是否有異常發生,finally塊中的程式碼總會被執行,其常用於執行資源清除操作,如關閉檔案讀寫流、關閉資料庫連線等。

finalize是Object類的一個方法,在垃圾回收器執行物件回收操作前會先呼叫該物件的finalize方法,可覆蓋此方法來提供垃圾回收時的其他資源回收,如關閉檔案等。


擴充套件面試題

問:finalize方法在垃圾回收時一定會被執行嗎?

答:不一定。當某個物件需要被垃圾回收器回收時,會先將該物件進行一次標記,並把該物件的finalize方法放到一個低優先順序的執行緒中去執行。待下一次垃圾回收時再將該物件回收,因無法保證低優先順序的執行緒一定會被執行,故答案為並不一定。


推薦閱讀


歡迎關注

Java名企面試吧,每天10點24分,我們不見不散!

丙子先生的宗旨是,每天以短篇幅講高頻面試題,不增加太多負擔,但需要持之以恆。

能力有限,歡迎指教!