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