JAVA final關鍵字
阿新 • • 發佈:2021-07-29
概念:final本意為"最終的、不可改變的",可以修飾類、成員方法以及成員變數。
使用方式-
final關鍵字修飾類體現在該類不能被繼承。
- 主要用於防止濫用繼承,如:java.lang.String類等。
如:public final class FinalClass {
public final void show() {
System.out.println("FinalClass類中的show方法!");
}
}public class SubFinalClass extends FinalClass {} 執行提示:java: 無法從最終src.FinalClass進行繼承
- final關鍵字修飾成員方法體現在該方法不能被重寫但可以被繼承。
- 主要用於防止不經意間造成重寫,如:java.text.Dateformat類中format方法等。
如:
public class FinalClass {
public final void show() {
System.out.println("FinalClass類中的show方法!");
}
}public class SubFinalClass extends FinalClass {
@Override
public void show() {
super.show();
}} //SubFinalClass 繼承了FinalClass,重寫了show方法,執行提示:SubFinalClass中的show()無法覆蓋src.FinalClass中的show() 被覆蓋的方法為final
public class SubFinalClass extends FinalClass {
public static void main(String[] args) {
SubFinalClass sfc = new SubFinalClass();
sfc.show();
}
} //SubFinalClass 繼承了FinalClass的show方法,執行正常
-
final關鍵字修飾成員變數體現在該變數必須初始化且不能改變。
- 主要用於防止不經意間造成改變,如:java.lang.Thread類中MAX_PRIORITY等。
code:
public class FinalMemberTest {
private final int cnt; // 顯式初始化
public static void main(String[] args) {
// 宣告FinalMemberTest型別的引用指向該類的物件
FinalMemberTest fmt = new FinalMemberTest();
// 列印成員變數的數值
System.out.println("fmt.cnt = " + fmt.cnt);
}
} //執行提示:java: 變數 cnt 未在預設構造器中初始化,被final修飾的變數必須初始化,改成private final int cnt==1即可正常執行,或者在構造塊或構造方法中賦值,如:
public class FinalMemberTest {
private final int cnt;
{
cnt = 2; // 構造塊中進行初始化
}
public static void main(String[] args) {
// 宣告FinalMemberTest型別的引用指向該類的物件
FinalMemberTest fmt = new FinalMemberTest();
// 列印成員變數的數值
System.out.println("fmt.cnt = " + fmt.cnt);
}
}
--------------------------構造方法中初始化-------------------------
public class FinalMemberTest {
private final int cnt;
public FinalMemberTest() {
cnt = 3; // 構造方法體中進行初始化
}
public static void main(String[] args) {
// 宣告FinalMemberTest型別的引用指向該類的物件
FinalMemberTest fmt = new FinalMemberTest();
// 列印成員變數的數值
System.out.println("fmt.cnt = " + fmt.cnt);
}
}
---------------------------------初始化後不能進行修改,修改報錯,如下code------------------------
public class FinalMemberTest {常量的概念
private final int cnt=1;
public FinalMemberTest() {
cnt = 3; // 構造方法體中進行初始化
}
public static void main(String[] args) {
// 宣告FinalMemberTest型別的引用指向該類的物件
FinalMemberTest fmt = new FinalMemberTest();
// 列印成員變數的數值
System.out.println("fmt.cnt = " + fmt.cnt);
}
} //報錯資訊:java: 無法為最終變數cnt分配值,原因:因為初始化賦值1,構造方法為3
• 在以後的開發中很少單獨使用final關鍵字來修飾成員變數,通常使用 public static final關鍵字共同修飾成員變數來表達常量的含義,常量的命 名規範要求是所有字母都要大寫,不同的單詞之間採用下劃線連。
• public static final double PI = 3.14;