为什么Java不允许在构造函数中初始化静态最终变量(例如static final int d)?

Tho*_*hor 4 java variables static final initialization

我正在尝试在Java中初始化不同类型的变量.我可以在构造函数中初始化final变量(例如final int b)和静态变量(例如static int c)但我不能在构造函数中初始化静态final变量(例如static final int d).IDE还会显示错误消息.

为什么Java不允许在构造函数中初始化静态最终变量?

public class InitialisingFields {
    int a;
    final int b;
    static int c;
    static final int d;

    InitialisingFields(){
        a = 1;
        b = 2;
        c = 3;
        d = 4;
    }

    public static void main(String[] args) {
        InitialisingFields i = new InitialisingFields(); 
    }

}
Run Code Online (Sandbox Code Playgroud)

错误信息:

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - cannot assign a value to final variable d
    at JTO.InitialisingFields.<init>(InitialisingFields.java:22)
    at JTO.InitialisingFields.main(InitialisingFields.java:26)
Java Result: 1
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 6

静态变量由类的所有实例共享,因此每次创建类的实例时,将再次分配相同的变量.由于它是最终的,因此只能分配一次.因此不允许这样做.

static final变量应保证只分配一次.因此,可以在声明它们的同一表达式中指定它们,也可以在静态初始化程序块中指定它们,该块仅执行一次.