關鍵字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修飾的方法不可見,無法重寫;

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM