Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Khởi tạo biến final khi tạo đối tượng trong Java

Biến final bắt buộc phải được khởi tạo trước khi constructor kết thúc. Java không gán giá trị mặc định cho field final (khác với field thường). Có 4 cách khởi tạo:

1. Khởi tạo tại khai báo


public class Demo {
    final int MAX_SIZE = 100; // OK
}

2. Khởi tạo qua phương thức final (static hoặc instance)


final int configValue = loadConfig(); // method phải final hoặc private

final int loadConfig() { 
    return 42; 
}

3. Khởi tạo trong constructor (phổ biến nhất cho field instance)


public class User {
    final String username;
    
    public User(String username) {
        this.username = username; // BẮT BUỘC gán ở đây
    }
}

4. Khởi tạo trong instance initializer block


public class Config {
    final int timeout;
    { 
        timeout = 5000; // chạy trước constructor
    }
}

Ví dụ tổng hợp


public class FinalInitDemo {
    final int a = 1;                    // 1. Tại khai báo
    final int b = computeB();           // 2. Qua method
    final int c;                        // 3. Trong constructor
    final int d;                        // 4. Trong initializer block
    
    { d = 99; } // instance initializer
    
    public FinalInitDemo(int c) {
        this.c = c;
    }
    
    private final int computeB() { return 2; }
    
    public static void main(String[] args) {
        FinalInitDemo obj = new FinalInitDemo(3);
        System.out.println("a=" + obj.a + ", b=" + obj.b + ", c=" + obj.c + ", d=" + obj.d);
    }
}

Kết quả


a=1, b=2, c=3, d=99

Lỗi thường gặp: Quên gán field final trong constructor → compile error: variable might not have been initialized.