Intro Java final

Intro Java final

Intro Java final

Intro Java final

Java final 修飾字用法詳解
final 是 Java 中的關鍵字,用來限制修改,根據使用位置有不同含義:

  1. 修飾變數 (Variables)
    基本類型變數
    final int x = 10;
    // x = 20; // 編譯錯誤!不能重新賦值
    物件參考
    final Listlist = new ArrayList<>();
    list.add(“Hello”); // ✅ 可以修改物件內容
    // list = new ArrayList<>(); // ❌ 不能重新賦值參考
    類別成員變數
    public class Example {
    final int CONSTANT = 100; // 必須在宣告時初始化
    final String name;

    // 或在建構子中初始化
    public Example(String name) {
    this.name = name;
    }

}
方法參數
public void method(final int param) {
// param = 5; // 編譯錯誤!
System.out.println(param);
}

  1. 修飾方法 (Methods)
    public class Parent {
    final void cannotOverride() {
    System.out.println(“此方法不能被覆寫”);
    }
    }

public class Child extends Parent {
// void cannotOverride() { } // 編譯錯誤!
}

  1. 修飾類別 (Classes)
    final class CannotExtend {
    // 此類別不能被繼承
    }

// class Child extends CannotExtend { } // 編譯錯誤!
著名例子:

String 類別是 final
所有包裝類別 (Integer, Double 等) 都是 final

  1. 常見使用模式
    常數定義
    public static final String API_URL = “https://api.example.com“;
    public static final int MAX_RETRY = 3;
    不可變物件設計
    public final class ImmutablePerson {
    private final String name;
    private final int age;

    public ImmutablePerson(String name, int age) {
    this.name = name;
    this.age = age;
    }

    public String getName() { return name; }
    public int getAge() { return age; }
    // 沒有 setter 方法

}
Lambda 表達式中的變數捕獲
int x = 10; // 實際上是 final (effectively final)
list.forEach(item -> System.out.println(item + x));

  1. 效能考量
    final 變數可能有輕微效能優化
    編譯器可以進行更好的最佳化
    有助於 JVM 的內聯優化

  2. 最佳實務
    ✅ 建議使用:

對不需要修改的變數使用 final
工具類別標記為 final
不希望被覆寫的方法標記為 final

✅ 好處:

提高程式碼可讀性
防止意外修改
編譯時期錯誤檢查
執行緒安全的保證(對於不可變物件)

這樣使用 final 可以讓程式碼更加安全和清晰!