更新時(shí)間:2019-09-14 09:00:00 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽9583次
今天動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)小編為大家介紹“java中final修飾變量、修飾符、方法、類(lèi)的詳細(xì)用法”,希望通過(guò)此文能夠幫助到大家,下面就隨小編一起看看java中final修飾變量、修飾符、方法、類(lèi)的詳細(xì)用法吧。
final可以用來(lái)修飾變量(包括類(lèi)屬性、對(duì)象屬性、局部變量和形參)、方法(包括類(lèi)方法和對(duì)象方法)和類(lèi)。
1、final 修飾變量
final修飾的變量表示此變量是“最后的、最終的”含義。一旦定義了final變量并在首次為其顯示初始化后,final修飾的變量值不可被改變。
所以,final修飾變量時(shí)就成了 常量(一旦賦值不能改變)
常量名一般要全部大寫(xiě);
final int BOY = 1;
這里需要注意以下幾個(gè)問(wèn)題:
final修飾的變量,無(wú)論是類(lèi)屬性、對(duì)象屬性、形參還是局部變量,這些變量都是需要進(jìn)行顯示初始化(即為其顯示指定初始值)。對(duì)于final屬性來(lái)講,系統(tǒng)不會(huì)提供默認(rèn)值,
對(duì)于final修飾的形參,由于是實(shí)參傳遞過(guò)來(lái)的,很好理解。
對(duì)于final修飾的局部變量,與未用final修飾的變量一樣,都是需要顯示初始化。即局部變量都是需要顯示初始化的。
對(duì)于一般的類(lèi)屬性和對(duì)象屬性,由類(lèi)和對(duì)象的初始化過(guò)程中可以看出,首先都進(jìn)行了默認(rèn)初始化。然后對(duì)有顯示賦值的變量才再進(jìn)行顯示初始化。
但對(duì)final修飾的類(lèi)屬性和對(duì)象屬性而言,如果不顯示初始化,其默認(rèn)將是進(jìn)行默認(rèn)初始化后的值,這與final本身出發(fā)點(diǎn)矛盾,
因此,Java語(yǔ)法規(guī)定:
final修飾的類(lèi)屬性和變量屬性必須要進(jìn)行顯示初始化賦值。
另外,無(wú)論對(duì)于基本數(shù)據(jù)類(lèi)型還是引用數(shù)據(jù)類(lèi)型,final修飾的變量都是首次顯示初始化后值都不能修改。對(duì)于基本數(shù)據(jù)類(lèi)型,很好理解。
對(duì)于引用數(shù)據(jù)類(lèi)型,引用變量指向的是實(shí)際的對(duì)象,但其存儲(chǔ)的是所指向?qū)ο蟮牡刂罚虼耍渲挡荒苄薷牟⒉灰馕吨渌赶虻膶?duì)象不能修改。
實(shí)例變量往往有三次賦值機(jī)會(huì),
分配空間,初始化屬性,調(diào)用構(gòu)造方法
2、final 修飾方法
final修飾的方法表示此方法已經(jīng)是“最后的、最終的”含義,亦即此方法不能被重寫(xiě)(可以重載多個(gè)final修飾的方法)。
此處需要注意的一點(diǎn)是:因?yàn)橹貙?xiě)的前提是子類(lèi)可以從父類(lèi)中繼承此方法,如果父類(lèi)中final修飾的方法同時(shí)訪問(wèn)控制權(quán)限為private,
將會(huì)導(dǎo)致子類(lèi)中不能直接繼承到此方法,因此,此時(shí)可以在子類(lèi)中定義相同的方法名和參數(shù),此時(shí)不再產(chǎn)生重寫(xiě)與final的矛盾,
而是在子類(lèi)中重新定義了新的方法。
/*
final修飾方法
*/
class Super{
//加上final之后就不能再覆蓋了
//final修飾方法時(shí)表示該方法不能被子類(lèi)覆蓋
public final void method(){
}
}
class Sub extends Super{
//方法的覆蓋
/*public final void method(){
}*/
}
3、final修飾類(lèi)
final修飾類(lèi)即表示此類(lèi)已經(jīng)是“最后的、最終的”含義。因此,用final修飾的類(lèi)不能被繼承,即不能擁有自己的子類(lèi)。
如果視圖對(duì)一個(gè)已經(jīng)用final修飾的類(lèi)進(jìn)行繼承,在編譯期間或發(fā)生錯(cuò)誤。
/final類(lèi)不能被子類(lèi)繼承,final讓此類(lèi)斷子絕孫,所以當(dāng)然不能被子類(lèi)覆蓋
final class Super{
//加上final之后就不能再覆蓋了
//final修飾方法時(shí)表示該方法不能被子類(lèi)覆蓋
public final void method(){
}
}
/*class Sub extends Super{
//方法的覆蓋
/*public final void method(){
}
}*/
以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)小編介紹的“java中final修飾變量、修飾符、方法、類(lèi)的詳細(xì)用法”的內(nèi)容,希望對(duì)大家有幫助,更多java最新資訊請(qǐng)繼續(xù)關(guān)注動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)官網(wǎng),每天會(huì)有精彩內(nèi)容分享與你。
相關(guān)免費(fèi)視頻教程推薦
java入門(mén)教程下載——final修飾方法局部變量:http://www.dabaquan.cn/xiazai/2578.html
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743