-1

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

2 回答 2

1

这是jdk中的一个错误。

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

还是没解决。。

于 2017-07-17T08:29:43.483 回答
-1

当您在 Java 中声明一个类而不显式声明构造函数时,Java 会创建一个不可见的默认无参数构造函数,如下所示:

public A() {}

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

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

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

于 2017-07-15T18:30:37.057 回答