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

时间:2014-12-18 10:34:26

标签: java

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

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

任何人都可以解释为什么会这样吗?

1 个答案:

答案 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