Java final 關鍵字

final關鍵字能夠用來修飾類、方法、成員變量和局部變量。 java

修飾類 安全

  • final關鍵字修飾的類不能被繼承。好比java.lang.String類就用final關鍵字修飾,java.lang.String不能被繼承,只能用jdk提供的java.lang.String類
  • final類中的成員變量能夠根據須要進行final修飾
  • final類中的全部成員方法隱式的指定爲final方法
  • 除非特殊考慮(肯定之後不會用來繼承或處於安全考慮不能繼承),儘可能不要把類設計爲final類

修飾方法 性能

  • 鎖定方法,防止任何繼承類修改方法的含義
  • 早起java版本中會將final方法轉爲內嵌調用,提高效率,若是方法國語龐大,可能感受不到任務性能提高。最近版本中不須要使用final方法進行優化了
  • 類的private方法隱式的指定爲final方法

修飾變量 優化

  • 對於final修飾的基本數據類型的變量,數值一旦被初始化之後就不能被更改
  • 對於final修飾的引用類型的變量,初始化之後內容是能夠被更的
  • 對於final修飾的引用類型的變量,初始化之後不能再指向另一個對象
  • 類的final成員變量必須在定義時或者構造器中初始化賦值,賦值之後不能再被賦值
  • final修飾參數並不能阻止在方法中對此final參數的更改
  • final修飾參數能夠阻止此final參數指向另一個對象
  • 不用final修飾參數 此參數能夠指向另一個對象,但不會影響外部這個參數的內容(緣由在於java採用的是值傳遞,對於引用變量,傳遞的是引用的值,也就是說讓實參和形參同時指向了同一個對象,所以讓形參從新指向另外一個對象對實參並無任何影響

和static變量的區別 spa

  • static修飾的變量多個類對象是同樣的,分配的一個內存空間,多個對象都用這一個就是一個值
  • final修飾的變量初始化多個類對象的時候,都有各自的內存空間,若是賦值的是具體的值各個對象的這個final變量都同樣,若是賦值的是隨機的值,值相同的可能性很是小

匿名內部類 設計

  • 匿名內部類使用外部局部變量只能是final變量(保證局部變量和內部類中的變量數據一致性)
  • 內部類中的使用的外部局部變量須要final修飾(保證局部變量和內部類中的變量數據一致性)


若有不正之處,歡迎指正。 對象

相關文章
相關標籤/搜索