Java-關鍵字final詳解(public static final)

一、final修飾類

B類繼承A類,相當於對A類的功能進行擴展,如果不希望對A類進行擴展,可以給A類加final關鍵字,這樣的話,A類就無法繼承了。

源代碼中String就是沒有子孫的

 結論:final修飾的類無法被繼承

二、final修飾的方法

 所以final修飾的方法無法覆蓋和重寫。

三、final修飾的變量

(1)局部變量

 

無法爲最終變量進行賦值了。

final修飾的變量只能賦一次值。

final修飾的變量一旦賦上值就不能再重新賦值了。

(2)fina修飾的變量如果這個變量是一個"引用"會怎麼樣?

解析:s2裏面最初分配了0x123,然而你再給final進行賦值就不行了,因爲final修飾的變量只能賦一次值。

final修飾的引用:該引用只能指向1個對象,並且它只能永遠指向該對象。並且該方法執行過程中,該引用指向該對象之後,該對象不會被垃圾回收期回收,直到當前方法結束,纔會釋放空間。

對象不能修改,裏面的數據能修改嗎?

可以的,雖然指向的對象不能修改,但是對象裏面的數據可以修改。

 內存圖

 

(3)fianl修飾實例變量 

變量age沒有初始化,所以sun公司,由final修飾的實例變量,系統不管賦默認值,要求程序員必須手動賦值。

 

只要趕在系統賦默認值之前賦值就行。

系統賦默認值是在構造方法執行的時候賦值。

所以這樣也是可以。

總結:final修飾的實例變量,系統不負責賦默認值,賦值要麼在變量後面寫上,要麼在構造方法裏面寫。

四、final修飾常量

public class FinalTest04{
    public static void main(String [] args){
}
}

class Chinese{
    //身份證號
    String idCard;
    //姓名,對象不同姓名不一樣
    String name;
    //國家的值是一個固定值:“中國”
    //實例變量在堆中,一個對象一份。100個對象100份。
    //實例變量既然使用final修飾了,說明該實例變量不會隨着對象的變化而變化。
    //該實例變量前面應該添加:static關鍵字,變爲靜態的,存儲在方法區
    static final String country="中國";
}

最終結果:

    static final聯合修飾的變量稱爲"常量"。常量名建議全部大寫,每個單詞之間採用下劃線銜接。

常量:實際上常量和靜態變量一樣,區別在於:常量的值不能變,常量和靜態變量,都是存儲在方法區,並且都是在類加載時初始化。

五、總結

(1)final修飾的類無法繼承

(2)final修飾的方法無法覆蓋

(3)final修飾的變量只能賦一次值。

(4)final修飾的引用一旦指向某個對象,則不能再重新指向其他對象,但該引用指向的對象內部的數據時可以修改的。

(5)final修飾的實例變量必須手動初始化,不能採用系統默認值。

(6)final修飾的實例變量一般都和static聯合使用,稱爲常量。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章