编译在编译未初始化的最终静态变量时显示错误的错误消息



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() {}

由于你的变量xfinal的,所以在声明时或在构造函数中需要给它值。

正如注释者 OTM 所指出的,静态最终变量应该在其声明中初始化,而不是在构造函数中初始化,因为构造函数可以被调用任意次数(包括零(。

我同意该错误会误导不了解默认构造函数的人,但它确实有一定的意义。

相关内容

最新更新