为什么Java不允许初始化构造函数中的静态final变量

如果声明变量static和final,则需要在声明或static块中初始化它。如果您尝试在构造函数中初始化它,编译器将假定您正在尝试重新分配值,并生成编译时错误–

示例

class Data {
   static final int num;
   Data(int i) {
      num = i;
   }
}
public class ConstantsExample {
   public static void main(String args[]) {
      System.out.println("常量的值: "+Data.num);
   }
}

编译时错误

ConstantsExample.java:4: error: cannot assign a value to final variable num
   num = i;
   ^
1 error

要使此程序工作,需要将静态块中的final静态变量初始化为−

示例

class Data {
   static final int num;
   static {
      num = 1000;
   }
}
public class ConstantsExample {
   public static void main(String args[]) {
      System.out.println("常量的值: "+Data.num);
   }
}

输出结果

常量的值: 1000