你所不知道的final

什麼是不變性

  • 如果對象在被創建後,狀態就不能被修改,那麼他就是不可變的
  • 具有不變性的對象,一定是線程安全的,我們不需要採取任何額外的安全措施,也能保證線程安全

final的作用

  • 被final關鍵字修飾的類不能被繼承,被final關鍵字修飾的類屬性和類方法不能被覆蓋(重寫);

3種用法:修飾方法,變量,類

修飾變量 :不能被改變
在這裏插入圖片描述
修飾方法:

  • 構造方法不允許修飾
  • 不可被重寫,也就是不能被override,即便子類有同樣名字的方法,那也不是override
    在這裏插入圖片描述
    修飾類:
  • final關鍵字修飾的類不能被繼承
  • 在這裏插入圖片描述

注意點

  • final 修飾對象的時候,只有對象的引用不可變,而對象本身的屬性是可以變的
  • final使用原則,良好的編程習慣

不變性和final的關係

  • 基本數據類型,確實被final修飾的就是不可變的
  • 但是對於對象類型,需要該對象保證自己被創建後,狀態永遠不變纔可以

不可變的第二種情況

把變量寫在線程內部,----棧封閉

  • 在方法裏新建局部變量,實際上是存儲在每個線程私有棧空間,而每個棧空間不能被其他線程訪問到,所以,不會出現線程安全問題,這就是著名的 “棧封閉” 技術
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章