我不完全理解为什么答案是这样的。这是示例问题中给出的代码:
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 ");
}
}
所以问题是输出/结果是什么。答案是:xycg
任何人都可以解释为什么会这样吗?
答案 0 :(得分:3)
静态块在加载类时执行,即不需要对象的实例。所以在你的情况下:
static
{
System.out.print("x ");
}
将首先打印x
。在加载类时,它总是先执行。
任何不在构造函数中的块(称为instance block
)将在构造函数之前执行(在继承的情况下调用super()
之后)但不是在任何静态块之前,所以:
{
System.out.print("y ");
}
然后将打印y
当您创建类Sequence
的实例时,您将调用它的构造函数,因此:
Sequence()
{
System.out.print("c ");
}
将打印c
。
最后,您调用go
对象的方法Sequence
:
void go()
{
System.out.print("g ");
}
将打印g
由于这一切,结果是:x y c g