【发布时间】:2019-08-09 15:06:33
【问题描述】:
我检查了Forward References During Field Initialization 和这个the answer from @assylias,但我仍然没有得到为什么的答案。
为什么静态块可以分配在它之后声明的静态变量,但可以不能访问它?
class Parent {
static {
i = 2; // valid
// can only assign new value to it instead of accessing it?
// System.out.println(i); // invalid - compile-error
}
static int i = 0;
static {
i = 3; // valid
}
}
是不是因为:这个值还没有初始化,所以我们只是明确地禁止你使用它?还是我不知道与安全有关的事情?
更新
这不是那个问题的重复
为什么使用类名访问时不会发生这种情况?
这个问题是关于为什么我们有这个设计?目的是什么?
【问题讨论】:
-
会有
compile error提到@Lino 所以你根本无法获取字节码 -
@Lino 此代码无法编译。没有要检查的字节码。不要在这里发布无意义的猜测。
-
是的,是因为它还没有初始化,错误信息是这样说的,不是吗?
-
@Hearen 询问为什么语言的决定是不容易回答的问题。这需要一位 java 开发人员的深入知识,除非 Brian Goetz 出现,否则我不确定这里是否有人可以回答这个问题
标签: java java-8 static static-block