首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java final 關鍵字完全解析:類、方法、變量、參數四大場景

     編輯:Java 相關知識

final 語義:「不可變更」或「最終態」,按修飾目標分四類場景。

1. final 類:不可繼承

  • 無子類,所有方法隱式 final
  • 適用:工具類、安全敏感類、確不需擴展的設計

2. final 方法:不可覆寫

public class Test1 {
    public void f1() { System.out.println("f1"); }
    public final void f2() { System.out.println("f2"); } // 鎖定實現
    public void f3() { System.out.println("f3"); }
    private void f4() { System.out.println("f4"); } // 隱式 final
}

public class Test2 extends Test1 {
    public void f1() { System.out.println("父類 f1 被覆寫"); }
    // public void f2() {} // 編譯錯誤
    public void f3() { System.out.println("父類 f3 被覆寫"); }
    // f4 不可見,無法覆寫
}

雙重動機:

  1. 語義鎖定:防止子類破壞契約
  2. 性能優化:編譯器可內聯(inline)調用,消除虛調用開銷

3. final 變量:常量語義

三類常量

類型修飾位置初始化時機存儲
靜態常量static final聲明處/靜態塊方法區
實例常量final 實例字段聲明處/構造器/實例塊堆(對象內)
局部常量final 區域變量首次賦值前棧幀

空白 final(Blank Final)

public class Test3 {
    public final int E; // 必須在構造器初始化
    public Test3(int x) { E = x; } // 不同對象可有不同常量值
}

靈活性:延遲到構造器賦值,實現「對象級常量」。

代碼演示

public class Test3 {
    private final String S = "final實例變量";
    private final int A = 100;
    public final int B = 90;
    public static final int C = 80;
    private static final int D = 70;
    public final int E; // 空白 final
    public Test3(int x) { E = x; }
    // 任何賦值嘗試編譯報錯
}

4. final 參數:傳入不可變

public void f1(final int i) {
    // i++; // 編譯錯誤
    System.out.print(i);
}

配合匿名內部類捕獲局部變量時必須 final(Java 8+ 隱式 final)。

總結表

目標效果典型場景
class不可繼承String、包裝類、安全類
method不可覆寫模板方法、核心算法、性能熱點
field單次賦值常量配置、不可變對象狀態
parameter不可修改引用/值匿名內部類捕獲、防誤改
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved