java中final關(guān)鍵字使用示例詳解

image.png

正面教材:

 public class CheapPersonalLoan extends PersonalLoan{
public static final String resCode= "FAIL" 
}

final經(jīng)常和static一起使用來聲明常量爬凑,你也會看到final是如何改善應(yīng)用性能的脸秽。

1.final關(guān)鍵字的含義?

final在Java中是一個保留的關(guān)鍵字悲靴,可以聲明成員變量川蒙、方法、類以及本地變量敲长。一旦你將引用聲明作final醉鳖,你將不能改變這個引用了捡硅,編譯器會檢查代碼,如果你試圖將變量再次初始化的話辐棒,編譯器會報(bào)編譯錯誤病曾。

2.什么是final變量?

凡是對成員變量或者本地變量(在方法中的或者代碼塊中的變量稱為本地變量)聲明為final的都叫作final變量漾根。final變量經(jīng)常和static關(guān)鍵字一起使用泰涂,作為常量。下面是final變量的例子:
public static final String LOAN = "loan" ;
LOAN = new String( "loan" ) //invalid compilation error
final變量是只讀的辐怕。

3.什么是final方法?

final也可以聲明方法逼蒙。方法前面加上final關(guān)鍵字,代表這個方法不可以被子類的方法重寫寄疏。如果你認(rèn)為一個方法的功能已經(jīng)足夠完整了是牢,子類中不需要改變的話,你可以聲明此方法為final陕截。final方法比非final方法要快驳棱,因?yàn)樵诰幾g的時(shí)候已經(jīng)靜態(tài)綁定了,不需要在運(yùn)行時(shí)再動態(tài)綁定农曲。下面是final方法的例子:
class PersonalLoan{
public final String getName(){
return "personal loan" ;
}
}
class CheapPersonalLoan extends PersonalLoan{
@Override
public final String getName(){
return "cheap personal loan" ; //compilation error: overridden method is final
}
}

4.什么是final類社搅?

使用final來修飾的類叫作final類。final類通常功能是完整的乳规,它們不能被繼承形葬。Java中有許多類是final的,譬如String, Interger以及其他包裝類暮的。下面是final類的實(shí)例:
final class PersonalLoan{
}
class CheapPersonalLoan extends PersonalLoan{ //compilation error: cannot inherit from final class
}

5.下面是一些使用final關(guān)鍵字的好處:
  • final關(guān)鍵字提高了性能笙以。JVM和Java應(yīng)用都會緩存final變量。
  • final變量可以安全的在多線程環(huán)境下進(jìn)行共享冻辩,而不需要額外的同步開銷猖腕。
  • 使用final關(guān)鍵字拆祈,JVM會對方法、變量及類進(jìn)行優(yōu)化谈息。
  • 不可變類
  • 創(chuàng)建不可變類要使用final關(guān)鍵字缘屹。不可變類是指它的對象一旦被創(chuàng)建了就不能被更改了凛剥。String是不可變類的代表侠仇。不可變類有很多好處,譬如它們的對象是只讀的犁珠,可以在多線程環(huán)境下安全的共享逻炊,不用額外的同步開銷等等。
  • 相關(guān)閱讀:為什么String是不可變的以及如何寫一個不可變類犁享。
6.關(guān)于final的重要知識點(diǎn)

final關(guān)鍵字可以用于成員變量余素、本地變量、方法以及類炊昆。
final成員變量必須在聲明的時(shí)候初始化或者在構(gòu)造器中初始化桨吊,否則就會報(bào)編譯錯誤。
你不能夠?qū)inal變量再次賦值凤巨。
本地變量必須在聲明時(shí)賦值视乐。
在匿名類中所有變量都必須是final變量。
final方法不能被重寫敢茁。
final類不能被繼承佑淀。
final關(guān)鍵字不同于finally關(guān)鍵字,后者用于異常處理彰檬。
final關(guān)鍵字容易與finalize()方法搞混伸刃,后者是在Object類中定義的方法,是在垃圾回收之前被JVM調(diào)用的方法逢倍。

7.接口中聲明的所有變量本身是final的捧颅。

final和abstract這兩個關(guān)鍵字是反相關(guān)的,final類就不可能是abstract的较雕。
final方法在編譯階段綁定碉哑,稱為靜態(tài)綁定(static binding)。
沒有在聲明時(shí)初始化final變量的稱為空白final變量(blank final variable)郎笆,它們必須在構(gòu)造器中初始化谭梗,或者調(diào)用this()初始化。不這么做的話宛蚓,編譯器會報(bào)錯“final變量(變量名)需要進(jìn)行初始化”激捏。
將類、方法凄吏、變量聲明為final能夠提高性能远舅,這樣JVM就有機(jī)會進(jìn)行估計(jì)闰蛔,然后優(yōu)化。
按照J(rèn)ava代碼慣例图柏,final變量就是常量序六,而且通常常量名要大寫:
private final int COUNT = 10 ;
對于集合對象聲明為final指的是引用不能被更改,但是你可以向其中增加蚤吹,刪除或者改變內(nèi)容例诀。譬如:

list.add(“home loan”); //valid
list.add( "personal loan" ); //valid
loans = new Vector(); //not valid

我們已經(jīng)知道final變量、final方法以及final類是什么了裁着。必要的時(shí)候使用final繁涂,能寫出更快、更好的代碼的二驰。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末扔罪,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子桶雀,更是在濱河造成了極大的恐慌矿酵,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矗积,死亡現(xiàn)場離奇詭異全肮,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)漠魏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門倔矾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人柱锹,你說我怎么就攤上這事哪自。” “怎么了禁熏?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵壤巷,是天一觀的道長。 經(jīng)常有香客問我瞧毙,道長胧华,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任宙彪,我火速辦了婚禮矩动,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘释漆。我一直安慰自己悲没,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布男图。 她就那樣靜靜地躺著示姿,像睡著了一般甜橱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上栈戳,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天岂傲,我揣著相機(jī)與錄音,去河邊找鬼子檀。 笑死镊掖,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的命锄。 我是一名探鬼主播堰乔,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼脐恩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起侦讨,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤驶冒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后韵卤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體骗污,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年沈条,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了需忿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡蜡歹,死狀恐怖屋厘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情月而,我是刑警寧澤汗洒,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站父款,受9級特大地震影響溢谤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜憨攒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一世杀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧肝集,春花似錦瞻坝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽炕吸。三九已至,卻和暖如春勉痴,著一層夾襖步出監(jiān)牢的瞬間赫模,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工蒸矛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瀑罗,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓雏掠,卻偏偏與公主長得像斩祭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子乡话,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法摧玫,類相關(guān)的語法,內(nèi)部類的語法绑青,繼承相關(guān)的語法诬像,異常的語法,線程的語...
    子非魚_t_閱讀 31,598評論 18 399
  • Java關(guān)鍵字final 在設(shè)計(jì)程序時(shí)闸婴,出于效率或者設(shè)計(jì)的原因坏挠,有時(shí)候希望某些數(shù)據(jù)是不可改變的。這時(shí)候可以使用fi...
    獅_子歌歌閱讀 738評論 1 4
  • 談到final關(guān)鍵字邪乍,想必很多人都不陌生降狠,在使用匿名內(nèi)部類的時(shí)候可能會經(jīng)常用到final關(guān)鍵字。另外庇楞,Java中的...
    WilsonMing閱讀 621評論 0 5
  • 我以為關(guān)心即使嘴上不說榜配,那應(yīng)該也在心里吧,可是沒有姐刁。 該干嘛干嘛芥牌,好話說了不夠,還得賣乖聂使,我不買還不成壁拉!自欺欺...
    琛琛_7166閱讀 241評論 0 1
  • 每天晚上只要想到明天又是那樣的一天,就特別不想睡著柏靶,或者就不要醒過來弃理,要是一想到以后好久好久都是這樣,就更是不...
    川靈閱讀 333評論 4 1