1. 程式人生 > 其它 >關鍵字abstract和static總結

關鍵字abstract和static總結

1. abstract:意為抽象,在Java中可以修飾方法或者類

(1)修飾方法,這個方法是抽象方法,無方法體,這個類一定是抽象類,這個類的子類必須實現這個抽象方法;

(2)修飾類,這個類一定是抽象類,但是不一定有抽象方法;

2. static:意為靜態的,在Java中修飾方法或者變數

2.1 按照是否靜態對類成員變數分,有兩種,被static修飾即叫靜態變數/類變數;另一種是例項變數,兩者區別:

(1)對於靜態變數在記憶體中只有一個拷貝(節省記憶體),JVM只為分配一次記憶體,在載入的過程中完成靜態變數的記憶體分配,通過類名呼叫(推薦),也可以使用物件名呼叫(不推薦);

(2)對於例項變數,每建立一個例項,就會為例項變數分配一次記憶體,例項變數在記憶體中有多個拷貝,互不影響(靈活);

(3)靜態變數使用場景:在物件之間共享時,方便訪問變數時;

2.2 static修飾的方法不能被重寫;靜態方法獨立於任何例項,所以必須得有方法體(必須實現);

(1)修飾的方法可以直接通過類名呼叫;被所有物件共享;

(2)靜態只能訪問靜態,非靜態既可以訪問靜態也可以訪問非靜態;

2.3 不加static修飾的成員是物件成員,為每一個物件所有,加static的成員為所有物件共有;

3. abstract 和 static 修飾方法:

(1) abstract無方法體,static有方法體,靜態方法獨立於任何例項,所以必須得有方法體(必須實現),不像是abstract(由子類實現);

(2) static修飾的方法優先於物件存在,所以修飾的方法裡面不能有this,super關鍵字,this和super代表的物件此時並不存在;

(4) static修飾的方法通過類名(子類名)直接呼叫,通過類物件名(子類物件名)呼叫不報錯但有警告;

4. abstract和static不能同時存在: abstract修飾的方法無方法體,不能隨著類的載入而載入到方法區,static修飾的方法隨著類的載入會被載入到類的方法區;

abstract還不能與final同時存在,因為final修飾的方法是最終方法,無法被重寫;

abstract不能與private同時存在,因為private修飾的方法不可見,無法重寫;

!!!個人(新手)整理,定有遺漏或存在錯誤,望指正,抱拳 老鐵!