1.static:
a)抽象類(abstractclass):使用了abstract關鍵字所修飾的類叫做抽象類。抽象類無法實例化,不能new出來一個抽象類的對象(實例)。
抽象方法(abstractmethod):使用abstract關鍵字所修飾的方法叫做抽象方法。抽象方法需要定義在抽象類中。相對于抽象方法,之前所定義的方法叫做具體方法(有聲明,有實現)。抽象方法只能存在與抽象類和接口中,但是抽象類中可以含有具體方法,接口中只能含有抽象方法。
b)抽象類的繼承:在子類繼承父類(父類是個抽象類)的情況下,那么該子類必須要實現父類中所定義的所有抽象方法;否則,該子類需要聲明成一個抽象類。
c)static修飾屬性:無論一個類生成了多少個對象,所有這些對象共同使用唯一一份靜態的成員變量;一個對象對該靜態成員變量進行了修改,其他對象的該靜態成員變量的值也會隨之發生變化。如果一個成員變量是static的,那么我們可以通過類名.成員變量名的方式來使用它(推薦使用這種方式)。
d)static修飾方法:static修飾的方法叫做靜態方法。對于靜態方法來說,可以使用類名.方法名的方式來訪問。靜態方法只能繼承,不能重寫(Override)。
1 package eameple; 2 public class Test 3 { 4 public static void main(String[] args) 5 { 6 R r = new R(); 7 r.method(); 8 T t= new R(); 9 t.method();10 }11 }12 13 abstract class T14 {15 16 public static void method()17 {18 System.out.
e)static 代碼塊:靜態代碼塊。靜態代碼塊的作用也是完成一些初始化工作。首先執行靜態代碼塊,然后執行構造方法。靜態代碼塊在類被加載的時候執行,而構造方法是在生成對象的時候執行;要想調用某個類來生成對象,首先需要將類加載到 java 虛擬機上(JVM),然后由 JVM 加載這個類來生成對象。類的靜態代碼塊只會執行一次,是在類被加載的時候執行的,因為每個類只會被加載一次,所以靜態代碼塊也只會被執行一次;而構造方法則不然,每次生成一個對象的時候都會調用類的構造方法,所以 new 一次就會調用構造方法一次。如果繼承體系中既有構造方法,又有靜態代碼塊,那么首先執行最頂層的類的靜態代碼塊,一直執行到最底層類的靜態代碼塊,然后再去執行最頂層類的構造方法,一直執行到最底層類的構造方法。注意:靜態代碼塊只會執行一次。
f)靜態的只能訪問靜態的;非靜態的可以訪問一切。
g)不能在靜態方法中使用this關鍵字。
2.interface
接口(interface):接口的地位等同于class,接口中的所有方法都是抽象方法。在聲明接口中的方法時,可以使用abstract關鍵字,也可以不使用。通常情況下,都會略掉abstract關鍵字。類可以實現接口,實現使用關鍵字implements表示,代表了某個類實現了某個接口。一個類實現了某個接口,那么該類必須要實現接口中聲明的所有方法。如果該類是個抽象類,那么就無需實現接口中的方法了。Java是單繼承的,也就是說某個類只能有唯一一個父類;一個類可以實現多個接口,多個接口之間使用逗號分隔。接口中所聲明的方法都是抽象方法。接口中的方法都是public的。接口中也可以定義成員變量。接口中的成員變量都是public、final、static的。
3.final
final關鍵字:final可以修飾屬性、方法、類。當一個類被final所修飾時,表示該類是一個終態類,即不能被繼承。當一個方法被final所修飾時,表示該方法是一個終態方法,即不能被重寫(Override)。當一個屬性被final所修飾時,表示該屬性不能被改寫。當final修飾一個原生數據類型時,表示該原生數據類型的值不能發生變化(比如說不能從10變為20);如果final修飾一個引用類型時,表示該引用型不能再指向其他對象了,但該引用所指向的對象的內容是可以發生變化的。
對于final類型成員變量,一般來說有兩種賦初值方式:在聲明final類型的成員變量時就賦上初值;在聲明final類型的成員變量時不賦初值,但在類的所有構造方法中都為其賦上初值。
一個類不能既是final,又是abstract的。因為abstract的主要目的是定義一種約定,讓子類去實現這種約定,而final表示該類不能被繼承,這樣abstract希望該類可以被繼承而final明確說明該類不能被繼承,兩者矛盾。因此一個類不能既是final的,又是abstract的。
新聞熱點
疑難解答