final使用详解
final的使用及注意事項
final是一個可以修飾變量,方法,類的修飾符
final修飾的方法不能被重寫
final修飾的類不能被繼承
final修飾的變量為一個常量
final不能與abstract一起使用
注意:當final修飾一個變量時要么在聲明時就給該變量賦值,要么在該類的構造函數中給該變量賦值
例如 final int i=9;//這就是在聲明時就為變量賦值
局部內部類訪問局部變量時該局部變量必須被final修飾(原因看使用final后發生的優化)
final修飾的基本數據類型其值不可以改變
final修飾的引用數據類型,其指向是不可以改變的,但其指向的對象的內容是可以改變的
?
?
使用final的目的:
一、 保證安全性,例如當一個方法被final修飾以后它就不能被重寫,那么在它的子類中是不可以覆蓋這個方法的,所以該方法在它的子類中安全性就得到了保證
二、 高效,在早期的JDK中若一個方法被final修飾時,當調用該方法時是直接使用方法的代碼來替換,省去了方法出棧入棧的過程,提高了效率,與C++中的內聯函數相似,現在的JDK好像提供了其他的優化方法
?
?
使用final后發生的一些優化:
一、 final修飾變量后,在編譯時就直接把final對應的常量將變量替換,這也是局部內部類訪問局部變量時,該局部變量必須被final修飾的原因,當局部變量被final修飾時,局部內部類訪問該變量時會將該變量寫入該內部類中方法區中的常量池中,即使該局部變量出棧以后,該內部類依然可以找到該變量對應的值
例如 final int i=5;? 在編譯的時候就直接把程序中出現i變量的地方全部替換為5并存儲進常量池中。
內部類知識可以參考博客中內部類的章節
?
轉載于:https://www.cnblogs.com/zhaolei1996/p/10623406.html
總結
- 上一篇: [转]动态规划DP的分类
- 下一篇: 问题 L: 超超的中等意思