当我尝试运行这段代码时,会打印“x y c g”。我知道x优先于y,因为它是静态的,构造函数(c)在方法(g)之前打印,但是将两行放在它们自己的块中的目的究竟是什么,这有助于实现什么?
public class Sequence {
Sequence() { System.out.print("c "); }
{ System.out.print("y ");}
public static void main(String[] args) {
new Sequence().go();
}
void go() { System.out.print("g "); }
static { System.out.print("x "); }
}
答案 0 :(得分:0)
您的问题与此问题密切相关,但不完全相同:Why java Instance initializers?
当您第一次引用类时,它会被加载并且静态组件在静态初始化程序中初始化。这些块对于设置集合或加载本机代码非常有用。
实例初始值设定项是一些与静态初始值设定项类似的代码,除了它在调用构造函数之前对每个实例进行操作。似乎在Java中没有绝对需要它,因为它只能放在构造函数的开头。