資安

你所不知道的final

@[toc]

什麼是不變性

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

final的作用

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

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

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

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

修飾類:

  • final關鍵字修飾的類不能被繼承
  • 在這裡插入圖片描述

注意點

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

不變性和final的關係

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

不可變的第二種情況

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

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

Leave a Reply

Your email address will not be published. Required fields are marked *