java - 从静态初始值设定项初始化静态最终字段

标签 java static-initializer

为什么不能使用声明类作为限定符(以静态方式)从相应的静态初始值设定项访问静态最终字段?

起初,我以为这是一个 Eclipse 错误:

Eclipse bug?

我还缺乏一些知识,因为静态初始化器不是我的日常工作。但是你瞧,这在没有类限定符的情况下如预期的那样有效:

Lack of knowledge?

为了完成我的测试系列,我在 bash 中试了一下:

Damn!

导致相同的结果。

这引出了最后一个问题:

从静态初始化程序 block 访问静态最终字段时,是否有任何理由禁止类限定符? 因为声明类之前没有初始化?

最佳答案

实际上,您可以从静态初始值设定项初始化静态字段。

但我认为(我不确定),您遇到了另一个问题。这里的问题是您(根据编译器)试图分配一个 final 字段。但是,您的真正意图不是分配它。您正在尝试初始化它。但是编译器没有得到这个。

当你调用像 Test.I 这样的东西时,编译器会认为你正在尝试修改一个静态变量,它可能之前已经初始化过(即来自静态初始化器)。编译器没那么聪明看到您实际上正在初始化您的变量,它只是解释您正在从一个类中分配一个静态变量,无论是 测试 Foo

但是,如果您在没有类限定符 的情况下调用它,编译器会知道您正在尝试修改您自己的静态变量,并且是在静态初始化程序中,因此该操作对于 < strong>final 字段。

拜托,我希望我说得足够清楚,请注意,我不确定这种行为。

关于java - 从静态初始值设定项初始化静态最终字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25284726/

相关文章:

java - Make 找不到 tools.jar

java - Apache FOP 无法通过 fatJar 中的 URI 找到外部图像

java - 获取静态初始化 block 以在不加载类的情况下在java中运行

java - 单击按钮路由到不同的应用程序

java - 在java中创建一个虚拟对象

java - Java 中的 Windows native 文件选择器

Java - 来自静态初始化 block 内部的类类型

Java基础: a static function without a name,或返回类型

java - ArrayList 初始化器上的 {{ 语法到底做了什么