Java-L03: final, finally, finalize

李文軒 2019-03-17
聲明:這是本人學(xué)習極客時間的Java核心36講的筆記,有侵權(quán)請聯(lián)系我。


final:

  • 修飾 類、方法、變量
  • final 修飾的 class 不可以繼承擴展
  • final 修飾的 變量不可被改變
  • final 修飾的 方法不可被重寫(override

用 final 的好處和目的:

  • 將方法或者類申明為 final,明確此處不得修改

    • 避免 API 使用這更改基礎(chǔ)功能
  • 將參數(shù)或者變量申明為final,避免意外賦值

    • 保護只讀數(shù)據(jù)
    • 在并發(fā)編程中,有利于減少同步開銷
  • 不需要特別用來提升性能

final 不是 immutable:

  • final 只限定引用不再被賦值,但對象行為不會被影響
  • 如果要實現(xiàn) immutable 的類:
    1. class 申明為 final
    2. 將變量定義為finalprivate,也不要設(shè)置setter方法
    3. 通過深度拷貝來完成初始化(字節(jié)數(shù)組流,對象流),而不是直接賦值
    4. 如果實現(xiàn)getter方法,使用copy-on-write原則,建立私有的copy

finally :

  • 用于保證重點代碼一定被執(zhí)行的機制

  • 通常用于異常處理機制中,不管如何,都要執(zhí)行的代碼

  • 例外的是,exit 和 線程中斷后,finally 的代碼將不會被執(zhí)行

    實踐:

    • try - catch - finally
    • try-witch-resource

finalize

  • 基礎(chǔ)類,java.lang.Object 的一個方法
  • 現(xiàn)在已不推薦使用
  • 目的為 保證對象在 gc 完成特定的資源回收
  • 無法保證什么時候執(zhí)行,執(zhí)行是否符合預(yù)期

java.lang.ref.Cleaner來代替finalize

  • Cleaner的實現(xiàn)利用流幻象引用(PhantomReference),即post-mortem清理機制
  • 每個Cleaner的操作都是獨立的,有自己的運行線程,避免意外死鎖。
  • !??!但是不能依賴 Cleaner 來做資源回收

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容