李文軒 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 的類:
- 將
class申明為final - 將變量定義為
final和private,也不要設(shè)置setter方法 - 通過深度拷貝來完成初始化(字節(jié)數(shù)組流,對象流),而不是直接賦值
- 如果實現(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來做資源回收