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