Java SE 7:执行顺序

时间:2013-08-01 11:15:22

标签: java

我正在攻读Java SE 7考试,我正在研究示例问题。我似乎无法弄清楚为什么以下程序以x y c g的顺序返回。

我理解为什么首先运行x,因为它是静态初始化块,但有人可以解释为什么ycg之前运行?< / p>

public class Triangle {
Triangle() {
    System.out.print("c ");
}

{
    System.out.print("y ");
}

public static void main(String[] args) {
    new Triangle().go();
}

void go() {
    System.out.print("g ");
}

static {
    System.out.print("x ");
}
}

4 个答案:

答案 0 :(得分:4)

{
    System.out.print("y ");
}

是一个实例初始化块,在构造函数之前运行。所以代码相当于:

Triangle() {
    System.out.print("y "); //initialisation block
    System.out.print("c ");
}

答案 1 :(得分:4)

订单将是静态块:

static {
   System.out.print("x ");
}

然后是实例初始化器:

{
  System.out.print("y ");
}

暗示:

Triangle() {
   System.out.print("y ");
   System.out.print("c ");
}

读:

  1. Instance Initializers
  2. Creation of New Class Instances
  3. Oracle tutorial

答案 2 :(得分:2)

“y”在块语句中,而不是在方法中。因此,当创建Triangle的实例时,即使在构造函数之前,也会执行块内的语句。

答案 3 :(得分:-1)

在内存中,首先执行IIB和SIB,然后将主函数加载到堆栈中,这就是获得此输出的原因。 正如它的名字暗示IIB(intilised instance block)这是非常重要的静态就像漂浮在海上的自由水手可以在主方法执行之前被任何类使用。

public class TestFirst

{
System.out.println(" From IIB");

}
static
{
    System.out.println("SIB ");
}

     public static void main(String   [] args){

System.out.println(" TestFirst ");

}

}