final、static、this、super 關鍵字總結
阿新 • • 發佈:2018-12-10
final 關鍵字
final關鍵字主要用在三個地方:變數、方法、類。
-
對於一個final變數,如果是基本資料型別的變數,則其數值一旦在初始化之後便不能更改;如果是引用型別的變數,則在對其初始化之後便不能再讓其指向另一個物件。
-
當用final修飾一個類時,表明這個類不能被繼承。final類中的所有成員方法都會被隱式地指定為final方法。
-
使用final方法的原因有兩個。第一個原因是把方法鎖定,以防任何繼承類修改它的含義;第二個原因是效率。在早期的Java實現版本中,會將final方法轉為內嵌呼叫。但是如果方法過於龐大,可能看不到內嵌呼叫帶來的任何效能提升(現在的Java版本已經不需要使用final方法進行這些優化了)。類中所有的private方法都隱式地指定為final。
static 關鍵字
static 關鍵字主要有以下四種使用場景:
- 修飾成員變數和成員方法: 被 static 修飾的成員屬於類,不屬於單個這個類的某個物件,被類中所有物件共享,可以並且建議通過類名呼叫。被static 宣告的成員變數屬於靜態成員變數,靜態變數 存放在 Java 記憶體區域的方法區。呼叫格式:
類名.靜態變數名
類名.靜態方法名()
- 靜態程式碼塊: 靜態程式碼塊定義在類中方法外, 靜態程式碼塊在非靜態程式碼塊之前執行(靜態程式碼塊—>非靜態程式碼塊—>構造方法)。 該類不管建立多少物件,靜態程式碼塊只執行一次.
- 靜態內部類(static修飾類的話只能修飾內部類):
- 靜態導包(用來匯入類中的靜態資源,1.5之後的新特性): 格式為:
import static
這兩個關鍵字連用可以指定匯入某個類中的指定靜態資源,並且不需要使用類名呼叫類中靜態成員,可以直接使用類中靜態成員變數和成員方法。
this 關鍵字
this關鍵字用於引用類的當前例項。 例如:
class Manager {
Employees[ ] employees;
void manageEmployees() {
int totalEmp = this.employees.length;
System.out.println("Total employees: " + totalEmp);
this.report();
}
void report() { }
}
在上面的示例中,this關鍵字用於兩個地方:
- this.employees.length:訪問類Manager的當前例項的變數。
- this.report():呼叫類Manager的當前例項的方法。
此關鍵字是可選的,這意味著如果上面的示例在不使用此關鍵字的情況下表現相同。 但是,使用此關鍵字可能會使程式碼更易讀或易懂。
super 關鍵字
super關鍵字用於從子類訪問父類的變數和方法。 例如:
public class Super {
protected int number;
protected showNumber() {
System.out.println("number = " + number);
}
}
public class Sub extends Super {
void bar() {
super.number = 10;
super.showNumber();
}
}
在上面的例子中,Sub 類訪問父類成員變數 number 並呼叫其其父類 Super 的 showNumber()
方法。
使用 this 和 super 要注意的問題:
- super 呼叫父類中的其他構造方法時,呼叫時要放在構造方法的首行!this 呼叫本類中的其他構造方法時,也要放在首行。
- this、super不能用在static方法中。
簡單解釋一下:
被 static 修飾的成員屬於類,不屬於單個這個類的某個物件,被類中所有物件共享。而 this 代表對本類物件的引用,指向本類物件;而 super 代表對父類物件的引用,指向父類物件;所以, this和super是屬於物件範疇的東西,而靜態方法是屬於類範疇的東西。