Java final關鍵字

java中的final關鍵字用於限制用戶修改變量或重寫一個類或方法。 java final關鍵字可以在許多上下文中使用。 final可以是:

  1. 變量
  2. 方法

final關鍵字可以應用於變量,沒有值的final變量稱爲空白變量或未初始化的最終變量。 它只能在構造函數中初始化。 空白最終變量也可以是靜態的,它將僅在靜態塊中初始化。 在之後的文章中我們將詳細學習這些。 下面先學習final關鍵字的基礎知識。

1. Java final變量

如果將變量設置爲final,則不能更改final變量的值(它將是常量)。final關鍵字應用有以下幾點需要注意:

  1. 禁止變量的值被改變;
  2. 禁止方法重寫;
  3. 禁止類繼承;

final變量的示例

要改變final變量的值,這是不可能的,因爲一個final變量一次分配一個值永遠不能更改。如下試圖修改 speedlimit 變量的值爲 400,這是不允許的。

class Bike9 {
    final int speedlimit = 90;// final variable

    void run() {
        speedlimit = 400; // 不可以修改 final 變量的值
    }

    public static void main(String args[]) {
        Bike9 obj = new Bike9();
        obj.run();
    }
}// end of class

上面代碼執行後生成以下結果 -

[編譯錯誤]Compile Time Error

2. Java final方法

如果任何方法聲明爲final,則不能覆蓋它。

final方法的示例,下面方法是不能覆蓋的 -

class Bike {
    final void run() {
        System.out.println("running");
    }
}

class Honda extends Bike {
    void run() { // final方法,不可以重寫
        System.out.println("running safely with 100kmph");
    }

    public static void main(String args[]) {
        Honda honda = new Honda();
        honda.run();
    }
}

上面代碼執行後生成以下結果 -

[編譯錯誤]Compile Time Error

3. Java final類

如果把任何一個類聲明爲final,則不能擴展它。final類的示例

final class Bike {
}

class Honda1 extends Bike { // 不可以擴展 final 類
    void run() {
        System.out.println("running safely with 100kmph");
    }

    public static void main(String args[]) {
        Honda1 honda = new Honda();
        honda.run();
    }
}

上面代碼執行後生成以下結果 -

[編譯錯誤]Compile Time Error

問題:是否可繼承final方法?

答: 是的,final方法是繼承的,但是不能覆蓋它。 例如:

class Bike {
    final void run() {
        System.out.println("running...");
    }
}

class Honda2 extends Bike {
    public static void main(String args[]) {
        new Honda2().run();
    }
}

上面代碼執行後生成以下結果 -

Output:running...

問題:什麼是空白或未初始化的final變量?

在聲明時未初始化的final變量稱爲空白final變量。

如果要在創建一個對象時初始化變量,並且變量在初始化後就不會被改變, 這是非常有用的。 例如員工的PAN CARD號碼。它只能在構造函數中初始化。

空白final變量的示例

class Student{  
    int id;  
    String name;  
    final String PAN_CARD_NUMBER;  
    ...  
}

問題:可以初始化空白的final變量嗎?

答: 是的,但只能在構造函數中。 例如:

class Bike10 {
    final int speedlimit;// blank final variable

    Bike10() { // 在構造函數中初始化
        speedlimit = 70;
        System.out.println(speedlimit);
    }

    public static void main(String args[]) {
        new Bike10();
    }
}

上面代碼執行後生成以下結果 -

70

靜態空白final變量

在聲明時未初始化的靜態final變量稱爲靜態空白final變量。 它只能在靜態塊中初始化。

靜態空白final變量的示例

class A {
    static final int data;// static blank final variable
    static {
        data = 50;
    }

    public static void main(String args[]) {
        System.out.println(A.data);
    }
}

問題:什麼是final參數?

如果將任何參數聲明爲final,則不能更改它的值。

class Bike11 {

    int cube(final int n) {
        n = n + 2;// can't be changed as n is final
        // n*n*n; // 不能修改 n 的值
        return n;
    }

    public static void main(String args[]) {
        Bike11 b = new Bike11();
        b.cube(5);
    }
}

上面代碼執行後生成以下結果 -

[編譯錯誤]Compile Time Error