天天看點

你所不知道的final

@[toc]

什麼是不變性

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

final的作用

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

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

修飾變量 :不能被改變

你所不知道的final

修飾方法:

  • 構造方法不允許修飾
  • 不可被重寫,也就是不能被override,即便子類有同樣名字的方法,那也不是override
    你所不知道的final

修飾類:

  • final關鍵字修飾的類不能被繼承
  • 你所不知道的final

注意點

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

不變性和final的關系

  • 基本資料類型,确實被final修飾的就是不可變的
  • 但是對于對象類型,需要該對象保證自己被建立後,狀态永遠不變才可以

不可變的第二種情況

把變量寫線上程内部,----棧封閉

  • 在方法裡建立局部變量,實際上是存儲在每個線程私有棧空間,而每個棧空間不能被其他線程通路到,是以,不會出現線程安全問題,這就是著名的 “棧封閉” 技術
    你所不知道的final

繼續閱讀