2

我正在学习 Java SE 7 考试,并且正在查看示例问题。我似乎无法弄清楚为什么以下程序按顺序返回x y c g

我理解为什么x首先运行,因为它是一个静态初始化块,但是有人可以解释为什么在和y之前运行吗?cg

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

4 回答 4

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

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

Triangle() {
    System.out.print("y "); //initialisation block
    System.out.print("c ");
}
于 2013-08-01T11:16:57.280 回答
4

订单将是静态块:

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

然后实例初始化器:

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

这是隐含的:

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

读:

  1. 实例初始化器
  2. 创建新的类实例
  3. 甲骨文教程
于 2013-08-01T11:19:31.763 回答
2

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

于 2013-08-01T11:19:52.853 回答
-1

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

public class TestFirst

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

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

     public static void main(String   [] args){

System.out.println(" TestFirst ");

}

}
于 2013-08-01T11:19:39.990 回答