我需要帮助理解 java 程序员 1 练习考试答案



我不完全明白为什么答案是这样的。这是示例问题中给出的代码:

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

最新更新