为什么我们不能用默认值声明常量?

时间:2014-11-23 18:46:34

标签: java constants declaration default-value final

以下代码给我一个错误The blank final field a may not have been initialized

public class Test {

   public static final int a;

   public static void main(String[] args) {

   }
}

  • 为什么常量不能保持整数的默认值?

2 个答案:

答案 0 :(得分:4)

因为那没有多大意义。在您的生命中,您需要多少个具有默认值的不可变原始常量?作为参考,请参阅https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html - 作为常量的唯一实际值是文字0(投射到不同的数字类型,但仍然是0,请注意),{ {1}}和false。 Sun做出了设计决定,禁止null没有指定值(8.3.1.2 final Fields,请注意 明确分配 这句话)非常合理:99.9%当编译器遇到它时的实际情况,仅仅是由于程序员的错误(忘记指定一个值),而不是有意识的设计选择。

那就是说,你应该知道你实际上可以这样做。

final

答案 1 :(得分:-1)

它可以保存默认值,问题是(如错误消息所述)是您必须指定a应该是应用程序默认值的值,例如

public static final int a = 42

修改

这由Java语言规范中的段落8.3.1.2 final Fields决定:

  

空白的最终类变量必须由声明它的类的静态初始化程序明确赋值,否则会发生编译时错误