本文主要針對Java常見關鍵字final,static,super,this進行詳細辨析,以方便讀者參考查閱。具體如下:
一、final
1)修飾class(類):
表示此類不可被繼承了
2)修飾method(方法)
表示此方法方法不可被重寫(@override)了
3)修飾variable(變量)
表示此變量的值之後不可被改變了,常用於修飾不可變的常量
注:final字面意思是“最後”、“不可更改”的意思,結合意思記憶更方便。
二、static(第二、三法常用)
1)修飾class(類):
(不常用)只可用於修飾內部類,普通類不允許這麼聲明
2)修飾method(方法)
static方法是屬於類所有(對象間共享),而不是某個對象。不需創建對象,可以使用類名進行調用此方法。
(程序執行時,類的字節碼被加載到內存中,類沒有創建對象時,類變量已經被分配內存,實例變量在創建具體對象時才分配內存空間。)
3)修飾variable(變量)
類似於2),變量是類級別的共享,不需創建對象,但是變量的值的變化是整體性的,也就是說,對象A對某static變量的值進行操作而改變了,那麼對象B操作的就是改變後的static變量。
注:使用static修飾的代碼塊叫做靜態代碼塊,靜態代碼塊在JVM加載類的時候就先被執行了,無論它們被放在什麼位置,它們都是先被執行,然後才是正常的代碼塊被執行。可以有多個靜態代碼塊,它們會依次被JVM按照出現順序執行,每個代碼塊只會被執行一次。
靜態方法中不能有this和super關鍵字出現。
三、super:(指對父類的引用)
1)與Class相關(父類,也稱超類):
通過super(參數1,參數2,……,參數n),調用父類構造函數;
2)與Method(方法)相關
super.Methord(參數1,參數2,……,參數n)調用父類被重寫的方法;
3)與variable(變量)相關
super.variable,調用父類的變量
注:super必須用在子類構造方法的第一行;
當父類沒有不帶參數的構造方法時,子類需要使用super來顯式地調用父類的構造方法,super指的是對父類的引用
四、this:(對當前對象的引用)
1)Class相關:
this(參數1,參數2,……,參數n),這是普通的構造函數,只能是構造函數(其他)調用構造函數(this),普通函數無法調用構造函數。
2)Method(方法)相關:
調用當前對象的方法
3)Variable(變量)相關:
調用當前對象的變量
注:this();和super();顯式的調用構造函數只能放在構造第一行;
this.method..();super.method..();可以放在任何地方當作一個普通的方法使;
構造器和方法使用關鍵字this有很大的區別。方法引用this指向正在執行方法的類的實例。靜態方法不能使用this關鍵字,因為靜態方法不屬於類的實例,所以this也就沒有什麼東西去指向。構造器的this指向同一個類中,不同參數列表的另外一個構造器。