一、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聯合使用,稱爲常量。