9

我正在为 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,因为 ti 会调用 getInt,然后将 k 递增到 21。

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

4

2 回答 2

17

The variables are initialized from top to bottom.

This is what happens:

  1. Initially both i and k have the (default) value 0.
  2. The value computed by getInt() (which at the time is 0 + 1) is assigned to i
  3. 20 is assigned to k
  4. 1 20 is printed.

Good reading:

于 2011-11-21T20:29:49.190 回答
0

jvm会像这样跟随,

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

在第一步中,jvm 将提供默认值..on 那个时间变量处于 readindirectly write only 状态..

于 2011-11-24T12:46:19.160 回答