鍍金池/ 教程/ Java/ Java final關(guān)鍵字
Java for循環(huán)
Java接口
Java是什么?
Java命名約定
java中方法重載和方法重寫的區(qū)別
Java運(yùn)算符
Java抽象類
Java快速入門
Java實(shí)例初始化程序塊
Java靜態(tài)綁定和動(dòng)態(tài)綁定
Java do-while循環(huán)
Java對(duì)象克隆
Java Object類
Java聚合
Java繼承
Java this關(guān)鍵字
Java虛擬機(jī)內(nèi)部體系結(jié)構(gòu)
Java構(gòu)造器(構(gòu)造方法)
Eclipse安裝和配置
Java多態(tài)
Java方法重載
Java while循環(huán)
Java教程
Java按值調(diào)用和引用調(diào)用
Java strictfp關(guān)鍵字
Java封裝
Java語(yǔ)言特點(diǎn)
Java數(shù)組
Java instanceof運(yùn)算符
Java包裝類
Java命令行參數(shù)
Java包
Java面向?qū)ο螅∣OP)概念
簡(jiǎn)單Java程序
Java基礎(chǔ)實(shí)例程序
Java對(duì)象和類
Java continue語(yǔ)句
Java抽象類和接口的區(qū)別
C++ VS Java比較
Java if/else語(yǔ)句
Java switch語(yǔ)句
Java歷史
Java變量和數(shù)據(jù)類型
安裝Java環(huán)境(Linux)
Java JDK安裝和配置
Hello Java程序的內(nèi)部細(xì)節(jié)
Java break語(yǔ)句
Java方法重寫
Java Unicode編碼系統(tǒng)
怎么樣開始學(xué)習(xí)Java編程?
對(duì)象和類之間的區(qū)別
Java訪問修飾符
Java super關(guān)鍵字
Java注釋
JDK,JRE和JVM之間的區(qū)別
Java final關(guān)鍵字
Java static關(guān)鍵字

Java final關(guān)鍵字

java中的final關(guān)鍵字用于限制用戶修改變量或重寫一個(gè)類或方法。 java final關(guān)鍵字可以在許多上下文中使用。 final可以是:

  1. 變量
  2. 方法

final關(guān)鍵字可以應(yīng)用于變量,沒有值的final變量稱為空白變量或未初始化的最終變量。 它只能在構(gòu)造函數(shù)中初始化。 空白最終變量也可以是靜態(tài)的,它將僅在靜態(tài)塊中初始化。 在之后的文章中我們將詳細(xì)學(xué)習(xí)這些。 下面先學(xué)習(xí)final關(guān)鍵字的基礎(chǔ)知識(shí)。

1. Java final變量

如果將變量設(shè)置為final,則不能更改final變量的值(它將是常量)。final關(guān)鍵字應(yīng)用有以下幾點(diǎn)需要注意:

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

final變量的示例

要改變final變量的值,這是不可能的,因?yàn)橐粋€(gè)final變量一次分配一個(gè)值永遠(yuǎn)不能更改。如下試圖修改 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

上面代碼執(zhí)行后生成以下結(jié)果 -

[編譯錯(cuò)誤]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();
    }
}

上面代碼執(zhí)行后生成以下結(jié)果 -

[編譯錯(cuò)誤]Compile Time Error

3. Java final類

如果把任何一個(gè)類聲明為final,則不能擴(kuò)展它。final類的示例

final class Bike {
}

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

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

上面代碼執(zhí)行后生成以下結(jié)果 -

[編譯錯(cuò)誤]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();
    }
}

上面代碼執(zhí)行后生成以下結(jié)果 -

Output:running...

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

在聲明時(shí)未初始化的final變量稱為空白final變量。

如果要在創(chuàng)建一個(gè)對(duì)象時(shí)初始化變量,并且變量在初始化后就不會(huì)被改變, 這是非常有用的。 例如員工的PAN CARD號(hào)碼。它只能在構(gòu)造函數(shù)中初始化。

空白final變量的示例

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

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

答: 是的,但只能在構(gòu)造函數(shù)中。 例如:

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

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

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

上面代碼執(zhí)行后生成以下結(jié)果 -

70

靜態(tài)空白final變量

在聲明時(shí)未初始化的靜態(tài)final變量稱為靜態(tài)空白final變量。 它只能在靜態(tài)塊中初始化。

靜態(tài)空白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參數(shù)?

如果將任何參數(shù)聲明為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);
    }
}

上面代碼執(zhí)行后生成以下結(jié)果 -

[編譯錯(cuò)誤]Compile Time Error

上一篇:Java快速入門下一篇:Java是什么?