final 關(guān)鍵字
final關(guān)鍵字主要用在三個(gè)地方:變量褪贵、方法、類抗俄。
對(duì)于一個(gè)final變量脆丁,如果是基本數(shù)據(jù)類型的變量,則其數(shù)值一旦在初始化之后便不能更改动雹;如果是引用類型的變量槽卫,則在對(duì)其初始化之后便不能再讓其指向另一個(gè)對(duì)象。
當(dāng)用final修飾一個(gè)類時(shí)胰蝠,表明這個(gè)類不能被繼承歼培。final類中的所有成員方法都會(huì)被隱式地指定為final方法震蒋。
使用final方法的原因有兩個(gè)。第一個(gè)原因是把方法鎖定丐怯,以防任何繼承類修改它的含義喷好;第二個(gè)原因是效率。在早期的Java實(shí)現(xiàn)版本中读跷,會(huì)將final方法轉(zhuǎn)為內(nèi)嵌調(diào)用梗搅。但是如果方法過(guò)于龐大,可能看不到內(nèi)嵌調(diào)用帶來(lái)的任何性能提升(現(xiàn)在的Java版本已經(jīng)不需要使用final方法進(jìn)行這些優(yōu)化了)效览。類中所有的private方法都隱式地指定為final无切。
static 關(guān)鍵字
static 關(guān)鍵字主要有以下四種使用場(chǎng)景:
-
修飾成員變量和成員方法: 被 static 修飾的成員屬于類,不屬于單個(gè)這個(gè)類的某個(gè)對(duì)象丐枉,被類中所有對(duì)象共享哆键,可以并且建議通過(guò)類名調(diào)用。被static 聲明的成員變量屬于靜態(tài)成員變量瘦锹,靜態(tài)變量 存放在 Java 內(nèi)存區(qū)域的方法區(qū)籍嘹。調(diào)用格式:
類名.靜態(tài)變量名
類名.靜態(tài)方法名()
- 靜態(tài)代碼塊: 靜態(tài)代碼塊定義在類中方法外, 靜態(tài)代碼塊在非靜態(tài)代碼塊之前執(zhí)行(靜態(tài)代碼塊—>非靜態(tài)代碼塊—>構(gòu)造方法)。 該類不管創(chuàng)建多少對(duì)象弯院,靜態(tài)代碼塊只執(zhí)行一次.
- 靜態(tài)內(nèi)部類(static修飾類的話只能修飾內(nèi)部類): 靜態(tài)內(nèi)部類與非靜態(tài)內(nèi)部類之間存在一個(gè)最大的區(qū)別: 非靜態(tài)內(nèi)部類在編譯完成之后會(huì)隱含地保存著一個(gè)引用辱士,該引用是指向創(chuàng)建它的外圍類,但是靜態(tài)內(nèi)部類卻沒(méi)有听绳。沒(méi)有這個(gè)引用就意味著:1. 它的創(chuàng)建是不需要依賴外圍類的創(chuàng)建颂碘。2. 它不能使用任何外圍類的非static成員變量和方法。
-
靜態(tài)導(dǎo)包(用來(lái)導(dǎo)入類中的靜態(tài)資源椅挣,1.5之后的新特性): 格式為:
import static
這兩個(gè)關(guān)鍵字連用可以指定導(dǎo)入某個(gè)類中的指定靜態(tài)資源头岔,并且不需要使用類名調(diào)用類中靜態(tài)成員,可以直接使用類中靜態(tài)成員變量和成員方法鼠证。
this 關(guān)鍵字
this關(guān)鍵字用于引用類的當(dāng)前實(shí)例峡竣。 例如:
class Manager {
Employees[] employees;
void manageEmployees() {
int totalEmp = this.employees.length;
System.out.println("Total employees: " + totalEmp);
this.report();
}
void report() { }
}
在上面的示例中,this關(guān)鍵字用于兩個(gè)地方:
- this.employees.length:訪問(wèn)類Manager的當(dāng)前實(shí)例的變量量九。
- this.report():調(diào)用類Manager的當(dāng)前實(shí)例的方法澎胡。
此關(guān)鍵字是可選的,這意味著如果上面的示例在不使用此關(guān)鍵字的情況下表現(xiàn)相同娩鹉。 但是攻谁,使用此關(guān)鍵字可能會(huì)使代碼更易讀或易懂。
super 關(guān)鍵字
super關(guān)鍵字用于從子類訪問(wèn)父類的變量和方法弯予。 例如:
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 類訪問(wèn)父類成員變量 number 并調(diào)用其其父類 Super 的 showNumber()
方法。
使用 this 和 super 要注意的問(wèn)題:
- super 調(diào)用父類中的其他構(gòu)造方法時(shí)锈嫩,調(diào)用時(shí)要放在構(gòu)造方法的首行受楼!this 調(diào)用本類中的其他構(gòu)造方法時(shí)垦搬,也要放在首行。
- this艳汽、super不能用在static方法中猴贰。
簡(jiǎn)單解釋一下:
被 static 修飾的成員屬于類,不屬于單個(gè)這個(gè)類的某個(gè)對(duì)象河狐,被類中所有對(duì)象共享米绕。而 this 代表對(duì)本類對(duì)象的引用,指向本類對(duì)象馋艺;而 super 代表對(duì)父類對(duì)象的引用栅干,指向父類對(duì)象;所以捐祠, this和super是屬于對(duì)象范疇的東西碱鳞,而靜態(tài)方法是屬于類范疇的東西。