本文主要針對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指向同一個類別中,不同參數清單的另外一個建構器。