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

时间:2017-07-15 17:41:06

标签: java compiler-errors java-8 javacompiler

我的代码: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)

2 个答案:

答案 0 :(得分:1)

这是jdk中的一个错误。

https://bugs.openjdk.java.net/browse/JDK-8184444

仍未解决..

答案 1 :(得分:-1)

当您在Java中声明一个类而没有明确声明构造函数时,Java会创建一个看起来像这样的不可见的默认no-args构造函数:

public A() {}

由于变量xfinal,因此需要在声明它或在构造函数中赋予它的值。

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

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