java 關鍵字final static
final的概念
繼承的出現提高了代碼的復用性,
final的特點
l final修飾類不可以被繼承,但是可以繼承其他類。
class Yy {}
finalclass Fu extends Yy{} //可以繼承Yy類
class Zi extendsFu{} //不能繼承Fu類
l final修飾的方法不可以被子類重寫,但父類中沒有被final修飾方法,子類重寫後可以加final。
class Fu {
// final修飾的方法,不可以被覆蓋,但可以繼承使用
publicfinalvoid method1(){}
publicvoidmethod2(){}
}
class Zi extends Fu {
//重寫method2方法
publicfinalvoid method2(){}
}
final修飾的變量稱為常量,這些變量只能賦值一次。而且終身不變
finalinti = 20;
i = 30; //賦值報錯,final修飾的變量只能賦值一次
l 引用類型的變量值為對象地址值,地址值不能更改,但是地址內的對象屬性值可以修改。
final Person p = new Person();
Person p2 = new Person();
p = p2; //final修飾的變量p,所記錄的地址值不能改變
p.name = "小明";//可以更改p對象中name屬性值
l 修飾成員變量,需要在創建對象前賦值,否則報錯。(當沒有顯式賦值時,多個構造方法的均需要為其賦值。)
class Demo {
//直接賦值
finalintm = 100;
//final修飾的成員變量,需要在創建對象前賦值,否則報錯。
finalintn;
public Demo(){
//可以在創建對象時所調用的構造方法中,為變量n賦值
n = 2016;
}
}
static關鍵字
static它是靜態修飾符,一般用來修飾類中的成員。
static特點
l 被static修飾的成員變量屬於類,不屬於這個類的某個對象。(也就是說,多個對象在訪問或修改static修飾的成員變量時,其中一個對象將static成員變量值進行了修改,其他對象中的static成員變量值跟著改變,即多個對象共享同一個static成員變量)
l 被static修飾的成員可以並且建議通過類名直接訪問。
訪問靜態成員的格式:
類名.靜態成員變量名
類名.靜態成員方法名(參數)
對象名.靜態成員變量名 ------不建議使用該方式,會出現警告
對象名.靜態成員方法名(參數) ------不建議使用該方式,會出現警告
static註意事項
l 靜態內容是優先於對象存在,只能訪問靜態,不能使用this/super。靜態修飾的內容存於靜態區。
l 同一個類中,靜態成員只能訪問靜態成員
l main方法為靜態方法僅僅為程序執行入口,它不屬於任何一個對象,可以定義在任意類中。
l 多態調用方法中,編譯看=左邊,父類有,編譯成功,父類沒有,編譯失敗
運行,靜態方法,運行父類中的靜態方法,
運行,非靜態方法,運行子類的重寫方法
成員變量,編譯運行全是父類
定義靜態常量
public static final修飾的變量來完成定義。此時變量名用全部大寫,多個單詞使用下劃線連接。
定義格式:
public static final 數據類型變量名 = 值;
註意:因為接口不能new對象,所以成員變量必須是public static final 的格式:
當我們想使用類的靜態成員時,不需要創建對象,直接使用類名來訪問即可。
System.out.println(School.SCHOOL_NAME);
School.method(); // 調用一個靜態方法
java 關鍵字final static