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修飾的方法不可見,無法重寫;
!!!個人(新手)整理,定有遺漏或存在錯誤,望指正,抱拳 老鐵!