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

Jim*_*mmy 9 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);
   }
}
Run Code Online (Sandbox Code Playgroud)

我以为会是这样21 20,因为ti会调用getInt,然后将k增加到21.

但答案是1 20.我不明白为什么会这样,有人可以对此有所了解吗?

aio*_*obe 17

变量从上到下初始化.

这是发生的事情:

  1. 最初,双方ik有(默认)值0.
  2. getInt()(当时是0 + 1)计算的值被分配给i
  3. 20 分配给 k
  4. 1 20 打印出来.

好读:

  • @HotLicks - 这没什么好看的. (2认同)