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 20tiがgetIntを呼び出し、次にkをインクリメントして21にするので、そうなると思いました。

ただし、答えは1 20です。なぜ1になるのかわかりませんが、誰かがこれに光を当てることができますか?

4

2 に答える 2

17

変数は上から下に初期化されます。

これが起こることです:

  1. 最初は両方とも(デフォルト)値iを持っています。k0
  2. によって計算された値getInt()(その時点では0 + 1)はに割り当てられますi
  3. 20に割り当てられていますk
  4. 1 20印刷されます。

良い読書:

于 2011-11-21T20:29:49.190 に答える
0

jvmは次のようになります。

1.上から下への非静的メンバーの識別2.上から下への非静的変数とブロックの実行3.コンストラクターの実行......

最初のステップで、jvmはデフォルト値を提供します。その時点で、readindirectly書き込み専用状態の変数。

于 2011-11-24T12:46:19.160 に答える