为什么 Java 不允许在构造函数中初始化 static 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("value of the constant: "+Data.num);
   }
}

编译时错误

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

要使此程序起作用,你需要在静态块中初始化最终静态变量,如下所示:

示例

 在线演示

class Data {
   static final int num;
   static {
      num = 1000;
   }
}
public class ConstantsExample {
   public static void main(String args[]) {
      System.out.println("value of the constant: "+Data.num);
   }
}

输出

value of the constant: 1000

更新于:15-Oct-2019

609 人次浏览

开启你的 职业生涯

完成课程后获得认证

开始
广告