对实例变量的初始化感到困惑

时间:2011-11-21 20:26:29

标签: java scjp ocpjp

我正在学习SCJP考试,在做了一些模拟测试后我遇到了这个:

它询问以下内容的输出:

class TestClass
{
   int i = getInt();
   int k = 20;
   public int getInt() {  return k+1;  }
   public static void main(String[] args)
   {
      TestClass t = new TestClass();
      System.out.println(t.i+"  "+t.k);
   }
}

我认为它会是21 20,因为t.i会调用getInt,然后将k增加到21。

然而,答案是1 20。我不明白为什么它会是1,有人可以对此有所了解吗?

2 个答案:

答案 0 :(得分:17)

变量从上到下初始化。

这就是:

  1. 最初,ik都有(默认)值0
  2. getInt()计算的值(当时为0 + 1)已分配给i
  3. 20已分配到k
  4. 1 20已打印。
  5. 好读:

答案 1 :(得分:0)

jvm会像这样,

1.从上到下识别非静态成员 2.从上到下执行非静态变量和块 3.执行构造函数......

在第一步中,jvm将提供默认值..在readindirectly中的时间变量只写状态..