25

次の静的ブロックでいくつかの奇妙なシナリオを分析します。

static {
  System.out.println("Inside Static Block");
  i=100; // Compilation Successful , why ?
  System.out.println(i); // Compilation error "Cannot reference a field before it is defined"
}

private static int i=100;

使用中に同じコードが正常に機能している間:

static {
  System.out.println("Inside Static Block");
  i=100; // Compilation Successful , why ?
  System.out.println(MyClass.i); // Compiles OK
}

private static int i=100;

SOP が必要とするのに、変数の初期化がクラス名を使用した変数アクセスを必要としない理由がわかりませんか?

4

2 に答える 2

0

これは、コンパイラがライブ変数分析 (後方分析) などの静的コード分析を行っているためです。各プログラム ポイントについて、変数が次の書き込みの前に読み取られるかどうかを計算します。

于 2013-05-19T13:57:01.587 に答える