我需要帮助理解java程序员1练习考试答案(#1)
我不完全明白为什么答案是这样。以下是示例问题中给出的代码:我需要帮助理解java程序员1练习考试答案(#1),java,Java,我不完全明白为什么答案是这样。以下是示例问题中给出的代码: public class Sequence { Sequence() { System.out.print("c "); } { System.out.print("y "); } public static void main(String[] args) { new Sequence().go(); }
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
。它总是在类加载时首先执行
任何不在构造函数中的块(称为实例块
)都将在构造函数之前执行(在继承的情况下,在调用super()
之后执行)但不在任何静态块之前执行,因此:
{
System.out.print("y ");
}
然后将打印y
创建类序列的实例时,调用其构造函数,因此:
Sequence()
{
System.out.print("c ");
}
将打印c
最后,调用Sequence
对象的方法go
:
void go()
{
System.out.print("g ");
}
将打印g
由于所有这些,结果是:xycg
非常感谢。这就澄清了问题。