Java關(guān)鍵字(四)——final

對于Java中的 final 關(guān)鍵字,我們首先可以從字面意思上去理解次哈,百度翻譯顯示如下:

image

也就是說 final 英文意思表示是最后的哄辣,不可更改的。那么對應(yīng)在 Java 中也是表達這樣的意思忧额,可以用 final 關(guān)鍵字修飾變量、方法和類愧口。不管是用來修飾什么睦番,其本意都是指 “它是無法更改的”,這是我們需要牢記的,為什么要無法更改托嚣?無非就是設(shè)計所需或者能提高效率巩检,與前面介紹 static 關(guān)鍵字需要記住其與對象無關(guān)的理念一樣,牢記 final 的不可變的設(shè)計理念后再來了解 final 關(guān)鍵字的用法示启,便會順其自然了兢哭。

1、修飾變量

稍微有點Java基礎(chǔ)的都知道用final關(guān)鍵字修飾的變量稱為常量丑搔,常量的意思是不可更改。變量為基本數(shù)據(jù)類型提揍,不可更改很容易理解啤月,那么對于引用類型呢?不可能改的是其引用地址劳跃,還是對象的內(nèi)容谎仲?

我們首先構(gòu)造一個實體類:Person

package com.ys.bean;

/**
 * Create by YSOcean
 */
public class Person {
    private  String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

接著根據(jù)創(chuàng)建一個 Person 對象:

image

可以看到,首先通過 final 關(guān)鍵字修飾一個對象 p刨仑,然后接著將 p 對象指向另一個新的對象郑诺,發(fā)現(xiàn)報錯,也就是說final修飾的引用類型是不能改變其引用地址的杉武。

接著我們改動 p 對象的 name 屬性:

image

發(fā)現(xiàn)程序沒有報錯辙诞。

結(jié)論:被 final 修飾的變量不可更改其引用地址,但是可以更改其內(nèi)部屬性轻抱。

2飞涂、修飾方法

final 關(guān)鍵字修飾的方法不可被覆蓋。

在《Java編程思想》第 4 版 7.8.2 章節(jié) final 方法p176 頁這樣描述:使用 final 方法原因有兩個:

①祈搜、第一個原因是把方法鎖定较店,以防止任何繼承類修改它的含義,這是出于設(shè)計的考慮:想要確保在繼承中使方法的行為保持不變容燕,并且不會被覆蓋梁呈。

②、第二個原因是效率蘸秘,在 Java 的早期實現(xiàn)中官卡,如果將一個方法聲明為 final,就是同意編譯器將針對該方法的所有調(diào)用都轉(zhuǎn)為內(nèi)嵌調(diào)用醋虏,內(nèi)嵌調(diào)用能夠提高方法調(diào)用效率味抖,但是如果方法很大,內(nèi)嵌調(diào)用不會提高性能灰粮。而在目前的Java版本中(JDK1.5以后)仔涩,虛擬機可以自動進行優(yōu)化了,而不需要使用 final 方法粘舟。

所以final 關(guān)鍵字只有明確禁止覆蓋方法時熔脂,才使用其修飾方法佩研。

  PS:《Java編程思想》中指出類中所有的 private 方法都隱式指定為 final 的,所以對于 private 方法霞揉,我們顯式的聲明 final 并沒有什么效果旬薯。但是我們創(chuàng)建一個父類,并在父類中聲明一個 private 方法适秩,其子類中是能夠重寫其父類的private 方法的绊序,這是為什么呢?

父類:Parent.class

package com.ys.bean;
 /** * Create by YSOcean */
public class Parent { private void say(){
        System.out.println("parent");
    }
}

子類:Son.class

package com.ys.bean;
/**
 * Create by YSOcean
 */
public class Son extends Parent {

    private void say(){
        System.out.println("son");
    }

}

其實仔細看看秽荞,這種寫法是方法的覆蓋嗎骤公?我們通過多態(tài)的形式并不能調(diào)用到父類的 say() 方法:

image

并且,如果我們在子類的 say() 方法中扬跋,添加 @Override 注解也是會報錯的阶捆。

image

所以這種形式并不算方法的覆蓋。

3钦听、修飾類

final 修飾類表示該類不可被繼承洒试。

也就是說不希望某個類有子類的時候,用final 關(guān)鍵字來修飾朴上。并且由于是用 final 修飾的類垒棋,其類中所有的方法也被隱式的指為 final 方法。

在 JDK 中有個最明顯的類 String 痪宰,就是用 final 修飾的捕犬,將 String 類用 final 修飾很重要的一個原因是常量池。關(guān)于 String 類的描述酵镜,可以參考我的這篇博客碉碉。

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市淮韭,隨后出現(xiàn)的幾起案子垢粮,更是在濱河造成了極大的恐慌,老刑警劉巖靠粪,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜡吧,死亡現(xiàn)場離奇詭異,居然都是意外死亡占键,警方通過查閱死者的電腦和手機昔善,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畔乙,“玉大人君仆,你說我怎么就攤上這事。” “怎么了返咱?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵钥庇,是天一觀的道長。 經(jīng)常有香客問我咖摹,道長评姨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任萤晴,我火速辦了婚禮吐句,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘店读。我一直安慰自己嗦枢,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布两入。 她就那樣靜靜地躺著净宵,像睡著了一般敲才。 火紅的嫁衣襯著肌膚如雪裹纳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天紧武,我揣著相機與錄音剃氧,去河邊找鬼。 笑死阻星,一個胖子當(dāng)著我的面吹牛朋鞍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播妥箕,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼滥酥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了畦幢?” 一聲冷哼從身側(cè)響起坎吻,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宇葱,沒想到半個月后瘦真,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡黍瞧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年诸尽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片印颤。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡您机,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情往产,我是刑警寧澤被碗,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站仿村,受9級特大地震影響锐朴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蔼囊,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一焚志、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧畏鼓,春花似錦酱酬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至让禀,卻和暖如春挑社,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背巡揍。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工痛阻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人腮敌。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓阱当,卻偏偏與公主長得像,于是被迫代替她去往敵國和親糜工。 傳聞我的和親對象是個殘疾皇子弊添,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法捌木,內(nèi)部類的語法油坝,繼承相關(guān)的語法,異常的語法钮莲,線程的語...
    子非魚_t_閱讀 31,631評論 18 399
  • 一免钻、Java 簡介 Java是由Sun Microsystems公司于1995年5月推出的Java面向?qū)ο蟪绦蛟O(shè)計...
    子非魚_t_閱讀 4,186評論 1 44
  • 小學(xué)三年級的語文課上,老師布置了一篇作文崔拥,讓同學(xué)們回家觀察描寫一個植物极舔。這并不是很困難的作業(yè),我想好了要寫我窗臺上...
    草垛閱讀 953評論 1 7
  • 勞動合同法第四十條第三點:勞動合同訂立時所依據(jù)的客觀情況發(fā)生重大變化链瓦,致使勞動合同無法履行拆魏,經(jīng)用人單位與勞動...
    217cbd3a3d3a閱讀 217評論 0 0
  • 奶奶從老家?guī)砹撕枚嗨约悍N的柿子盯桦。柿子比我的拳頭大一點兒,圓一點渤刃,橙色的拥峦,特別美麗。一開始柿子是硬硬的卖子,...
    趙安琪1閱讀 344評論 0 0