我在看下面的代码,发现有些奇怪:
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 ");
}
}
我本以为这会导致编译错误,因为带有"y "的System.out
不属于方法声明而只是一个{ }
。 为什么这是有效的? 我不明白为什么这段代码会被调用或应该被调用。
运行时它输出x y c g
,为什么static { }
在序列构造函数之前被调用?
super("x ");
开始,那么在任何初始化块之前都会执行超类构造函数。 - RokL