1. 程式人生 > 其它 >JAVA final關鍵字

JAVA final關鍵字

概念: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;