以下代码给我一个错误The blank final field a may not have been initialized
。
public class Test {
public static final int a;
public static void main(String[] args) {
}
}
答案 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决定:
空白的最终类变量必须由声明它的类的静态初始化程序明确赋值,否则会发生编译时错误