Java final總結(jié)

final可以用來(lái)修飾變量(包括類屬性捺球、對(duì)象屬性滑潘、局部變量和形參)粟耻、方法(包括類方法和對(duì)象方法)和類查近。

1. final修飾類:

final修飾類即表示此類已經(jīng)是“最后的眉踱、最終的”含義。因此霜威,用final修飾的類不能被繼承谈喳,即不能擁有自己的子類。如果視圖對(duì)一個(gè)已經(jīng)用final修飾的類進(jìn)行繼承戈泼,在編譯期間或發(fā)生錯(cuò)誤婿禽。

2. final修飾方法:

final修飾的方法表示此方法已經(jīng)是“最后的、最終的”含義大猛,亦即此方法不能被重寫(可以重載多個(gè)final修飾的方法)谈宛。

此處需要注意的一點(diǎn)是:因?yàn)?b>重寫的前提是子類可以從父類中繼承此方法,如果父類中final修飾的方法同時(shí)訪問(wèn)控制權(quán)限為private胎署,將會(huì)導(dǎo)致子類中不能直接繼承到此方法,因此窑滞,此時(shí)可以在子類中定義相同的方法名和參數(shù)琼牧,此時(shí)不再產(chǎn)生重寫與final的矛盾,而是

在子類中重新定義了新的方法哀卫。

1publicclassBextendsA {23publicstaticvoidmain(String[] args) {45}67publicvoidgetName() {89}10}1112classA {1314/**15* 因?yàn)閜rivate修飾巨坊,子類中不能繼承到此方法,因此此改,子類中的getName方法是重新定義的趾撵、16* 屬于子類本身的方法,編譯正常17*/18privatefinalvoidgetName() {1920}2122/*因?yàn)閜blic修飾共啃,子類可以繼承到此方法占调,導(dǎo)致重寫了父類的final方法,編譯出錯(cuò)23public final void getName() {2425}26*/27}

3. final 修飾變量:

final修飾的變量表示此變量是“最后的移剪、最終的”含義究珊。一旦定義了final變量并在首次為其顯示初始化后,final修飾的變量值不可被改變纵苛。

這里需要注意以下幾個(gè)問(wèn)題:

1. final修飾的變量剿涮,無(wú)論是類屬性、對(duì)象屬性攻人、形參還是局部變量取试,這些變量都是需要進(jìn)行顯示初始化(即為其顯示指定初始值)

對(duì)于final修飾的形參怀吻,由于是實(shí)參傳遞過(guò)來(lái)的瞬浓,很好理解。

對(duì)于final修飾的局部變量烙博,與未用final修飾的變量一樣瑟蜈,都是需要顯示初始化烟逊。即局部變量都是需要顯示初始化的。

對(duì)于一般的類屬性和對(duì)象屬性铺根,由類和對(duì)象的初始化過(guò)程中可以看出宪躯,首先都進(jìn)行了默認(rèn)初始化。然后對(duì)有顯示賦值的變量才再進(jìn)行顯示初始化位迂。

但對(duì)final修飾的類屬性和對(duì)象屬性而言访雪,如果不顯示初始化,其默認(rèn)將是進(jìn)行默認(rèn)初始化后的值掂林,這與final本身出發(fā)點(diǎn)矛盾臣缀,因此,Java語(yǔ)法規(guī)定:

final修飾的類屬性和變量屬性必須要進(jìn)行顯示初始化賦值泻帮。

另外精置,無(wú)論對(duì)于基本數(shù)據(jù)類型還是引用數(shù)據(jù)類型,final修飾的變量都是首次顯示初始化后值都不能修改锣杂。對(duì)于基本數(shù)據(jù)類型脂倦,很好理解。對(duì)于引用數(shù)據(jù)類型元莫,引用變量指向的是實(shí)際的對(duì)象赖阻,但其存儲(chǔ)的是所指向?qū)ο蟮牡刂罚虼缩獯溃渲挡荒苄薷牟⒉灰馕吨渌赶虻膶?duì)象不能修改火欧。

4. final修飾變量后導(dǎo)致的“宏替換”/"宏變量"問(wèn)題

Java 中宏變量/宏替換指的是在java代碼中在編譯期某些變量能夠直接被其本身的值所替換,編譯到.class文件中茎截。因此苇侵,編譯后的.class文件中已經(jīng)不存在此變了。

在String類型的變量中稼虎,有時(shí)候經(jīng)常遇到如下情況:

1publicclassTest {23publicstaticvoidmain(String[] args) {45String country = "China";6String name = "qqyumidi";78String userInfo = country + name;//編譯后此處依然是country和name變量9String user = "China" + "qqyumidi";//編譯后此處直接變成Chinaqqyumidi1011}12}

在上述代碼中的第9行衅檀,編譯后的變量結(jié)果直接為Chinaqqyumidi。而第8行代碼中霎俩,由于country和name都是普通的變量哀军,編譯器無(wú)法在編譯時(shí)直接確定userInfo的值,因此此處編譯后結(jié)果不直接是Chinaqqyumidi打却。但是杉适,如果希望第8行中的代碼在編譯期直接就能表示為Chinaqqyumidi,就需要用到final修飾符對(duì)country和name變量進(jìn)行修飾柳击。

原因:final修飾符修飾的變量在由于其本身的特性猿推,在編譯期就能直接確定其值,且此值不可變。在編譯過(guò)程中蹬叭,可以直接將其變量直接轉(zhuǎn)換成其值本身去表示藕咏。

1publicclassTest {23publicstaticvoidmain(String[] args) {45finalString country = "China";6finalString name = "qqyumidi";78String userInfo = country + name;//編譯后此處直接是Chianqqyumidi910}11}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市秽五,隨后出現(xiàn)的幾起案子孽查,更是在濱河造成了極大的恐慌,老刑警劉巖坦喘,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盲再,死亡現(xiàn)場(chǎng)離奇詭異绸栅,居然都是意外死亡撒璧,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門渡处,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)棠笑,“玉大人梦碗,你說(shuō)我怎么就攤上這事”途龋” “怎么了叉弦?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)藻糖。 經(jīng)常有香客問(wèn)我,道長(zhǎng)库车,這世上最難降的妖魔是什么巨柒? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮柠衍,結(jié)果婚禮上洋满,老公的妹妹穿的比我還像新娘。我一直安慰自己珍坊,他們只是感情好牺勾,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著阵漏,像睡著了一般驻民。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上履怯,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天回还,我揣著相機(jī)與錄音,去河邊找鬼叹洲。 笑死柠硕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的运提。 我是一名探鬼主播蝗柔,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼闻葵,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了癣丧?” 一聲冷哼從身側(cè)響起槽畔,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎坎缭,沒(méi)想到半個(gè)月后竟痰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡掏呼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年坏快,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片憎夷。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡莽鸿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拾给,到底是詐尸還是另有隱情祥得,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布蒋得,位于F島的核電站级及,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏额衙。R本人自食惡果不足惜饮焦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望窍侧。 院中可真熱鬧县踢,春花似錦、人聲如沸伟件。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)斧账。三九已至谴返,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間咧织,已是汗流浹背亏镰。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拯爽,地道東北人索抓。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親逼肯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子耸黑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法篮幢,內(nèi)部類的語(yǔ)法大刊,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法三椿,線程的語(yǔ)...
    子非魚_t_閱讀 31,630評(píng)論 18 399
  • 20- 枚舉,枚舉原始值,枚舉相關(guān)值,switch提取枚舉關(guān)聯(lián)值 Swift枚舉: Swift中的枚舉比OC中的枚...
    iOS_恒仔閱讀 2,278評(píng)論 1 6
  • 一:java概述:1缺菌,JDK:Java Development Kit,java的開發(fā)和運(yùn)行環(huán)境搜锰,java的開發(fā)工...
    ZaneInTheSun閱讀 2,650評(píng)論 0 11
  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法伴郁,可以作為本類的靜態(tài)方法來(lái)...
    XLsn0w閱讀 1,222評(píng)論 0 2
  • 面向?qū)ο笾饕槍?duì)面向過(guò)程。 面向過(guò)程的基本單元是函數(shù)蛋叼。 什么是對(duì)象:EVERYTHING IS OBJECT(萬(wàn)物...
    sinpi閱讀 1,054評(píng)論 0 4