My Code :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)
这是 jdk 中的一个错误。
https://bugs.openjdk.java.net/browse/JDK-8184444
仍未解决..
当您在 Java 中声明一个类而不显式声明构造函数时,Java 会创建一个不可见的默认 no-args 构造函数,如下所示:
public A() {}
由于你的变量x
是final
的,所以在声明时或在构造函数中需要给它值。
正如注释者 OTM 所指出的,静态最终变量应该在其声明中初始化,而不是在构造函数中初始化,因为构造函数可以被调用任意次数(包括零(。
我同意该错误会误导不了解默认构造函数的人,但它确实有一定的意义。