T.J*_*der 11
关于第一个问题,静态块确实按它们出现的顺序处理,但是在静态块之前首先处理声明.声明作为类的准备(JLS§12.3.2)的一部分进行处理,该声明在初始化之前发生(JLS§12.4.2).出于学习的目的,整个JLS§12可能是有用的,以及JLS§8,特别是第8.6节和JLS§8.7.(感谢Ted Hopp并且对于调出这些部分而言并不具有信誉.)
引用的代码中没有足够的信息来回答您的第二个问题.(无论如何,在每个问题上最好问一个问题.)但是例如:
public class Foo {
static {
ture = 9;
}
static int ture;
{ // instance block
System.out.println(":"+ture+":");
}
public static final void main(String[] args) {
new Foo();
}
}
Run Code Online (Sandbox Code Playgroud)
...只输出:9: 一次,因为只创建了一个实例.如果删除该new Foo();行,它根本不输出它.如果您看到:9:三次,那么您可能会在未显示的代码中创建三个实例.