你所不知道的final

什麼是不變性

若是對象在被建立後,狀態就不能被修改,那麼他就是不可變的具備不變性的對象,必定是線程安全的,咱們不須要採起任何額外的安全措施,也能保證線程安全編程

final的做用

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


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

修飾變量 :不能被改變圖片修飾方法:ide

構造方法不容許修飾不可被重寫,也就是不能被override,即使子類有一樣名字的方法,那也不是override圖片修飾類:final關鍵字修飾的類不能被繼承圖片ui

注意點

final 修飾對象的時候,只有對象的引用不可變,而對象自己的屬性是能夠變的final使用原則,良好的編程習慣spa

不變性和final的關係

基本數據類型,確實被final修飾的就是不可變的可是對於對象類型,須要該對象保證本身被建立後,狀態永遠不變才能夠線程



不可變的第二種狀況orm

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

在方法裏新建局部變量,其實是存儲在每一個線程私有棧空間,而每一個棧空間不能被其餘線程訪問到,因此,不會出現線程安全問題,這就是著名的 「棧封閉」 技術blog

相關文章
相關標籤/搜索