静态字段在定义或初始化之前不能被引用:
static Integer j = i; /* compile error */
static final Integer i = 5;
但是,当从实例初始化块(在匿名内部类中)引用它时,甚至不会生成警告。
参见示例:
class StaticInitialization {
static final Object o = new Object() {{
j = i;
}};
static Integer j, k;
static final Integer i = 5;
static final Object o2 = new Object() {{
k = i;
}};
}
结果是:j == null
, k == 5
,所以很明显我们已经做了参考,顺序很重要,没有警告或编译错误。
这段代码合法吗?