我的代码:A.java
package pack1;
public class A {
final static int x;
}
用于编译代码的命令:
javac -d . A.java
编译时间错误:
A.java:5: error: variable x not initialized **in the default constructor**
final static int x;
^
1 error
现在,编译器应抛出类似=>
的错误error: variable x not initialized **in the static block**
因为在这种情况下你可以初始化的地方,声明的最终静态未初始化变量只有=> 1)在声明本身时或 2)内部静态块
图片中没有构造函数......仍然编译器抛出误导的错误。
我正在使用jdk 1.8
java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
答案 0 :(得分:1)
答案 1 :(得分:-1)
当您在Java中声明一个类而没有明确声明构造函数时,Java会创建一个看起来像这样的不可见的默认no-args构造函数:
public A() {}
由于变量x
为final
,因此需要在声明它或在构造函数中赋予它的值。
正如评论者OTM指出的那样,静态最终变量应该在其声明中而不是在构造函数中初始化,因为构造函数可以被调用任意次(包括零)。
我同意这个错误会误导那些不了解默认构造函数的人,但它确实有一定的意义。