final關(guān)鍵字

final類

被final關(guān)鍵字修飾的類就是fianl類,final類無(wú)法被繼承。final類的所有方法在默認(rèn)情況下都會(huì)是final級(jí)別,因?yàn)轭惗紵o(wú)法被繼承,方法自然也無(wú)法被繼承。但是fianl類的域可以根據(jù)自己意愿選擇是否為final。

public final class FinalTest {
}

final方法

被final修飾的方法就是final方法,用final修飾方法的原因無(wú)非兩個(gè),第一就是將方法鎖定,讓其無(wú)法被繼承以防止任何繼承類修改它的含義。第二是出于效率的考慮(解釋暫無(wú))

final和private關(guān)鍵字

類中所有的private方法默認(rèn)情況下都是final級(jí)別的,也就是無(wú)法被繼承,因?yàn)閜rivate關(guān)鍵字將方法的權(quán)限限定在了當(dāng)前類中,其他類是無(wú)法直接訪問這個(gè)方法的。

這里有一點(diǎn)容易造成疑惑,那就是即使private方法是fianl級(jí)別的,表示它無(wú)法別繼承,但是如果我們繼承這個(gè)類,我們發(fā)現(xiàn),在子類中似乎仍然可以覆蓋這個(gè)方法,注意這里其實(shí)并不是覆蓋,而只是在子類中創(chuàng)建了一個(gè)和父類有著相同名字和參數(shù)列表的方法。它并不是從父類中繼承而來(lái)的。

覆蓋只有某一個(gè)方法是父類接口的一部分時(shí)才能稱之為覆蓋,也就是說(shuō),如果子類繼承了父類,那么在創(chuàng)建對(duì)象的時(shí)候能夠向上轉(zhuǎn)型并且調(diào)用到父類的原始方法。但是很明顯,在子類中是絕對(duì)無(wú)法調(diào)用到父類中的private方法的

final數(shù)據(jù)

final數(shù)據(jù)有兩種形式

  • 以基本數(shù)據(jù)類型修飾的數(shù)據(jù)
  • 以引用類型修飾的數(shù)據(jù)

以基本數(shù)據(jù)類型修飾的數(shù)據(jù)用來(lái)表示常量,而且和static關(guān)鍵字聯(lián)合使用,定義時(shí)必須對(duì)其進(jìn)行初始化。

public static final double PAI =3.14;

帶有static和final的編譯時(shí)常量的命名應(yīng)該全部使用大寫,字與字之間使用下劃線分開。

對(duì)于基本數(shù)據(jù)類型的final,它的值在程序中是不能改變的。除非去定義它的地方進(jìn)行修改。

引用數(shù)據(jù)類型的final則表示的是這個(gè)引用的地址不能改變,也就是說(shuō)一旦引用類型的final指向了一個(gè)對(duì)象,就不能改變而指向另外一個(gè)對(duì)象了。但同時(shí)final指向的這個(gè)引用雖然不能改變,但是引用指向的這個(gè)對(duì)象本身里面的內(nèi)容是可以改變的。

注意:我們不能因?yàn)槟硞€(gè)數(shù)據(jù)是final的,就認(rèn)為在編譯期間就能知道它的值。實(shí)際上他的值是可以在運(yùn)行時(shí)給出的。

static Random random = new Random(20);
public static final double PAI = random.nextDouble();

這種情況下,PAI的值只有在運(yùn)行時(shí)才被確定。

但是普遍情況下我們使用定義時(shí)就賦值的常量的情況較多。

一個(gè)即使static又是final的域占用一段不能改變的存儲(chǔ)空間。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容