コードの簡単なスニペットを次に示します。クラスのロードと初期化のプロセスについては、JLS セクション 12.4 と 12.5 に関連しています。クラスは、定数ではないクラスの静的変数にアクセスしている場合、または静的メソッドにアクセスしている可能性がある場合にのみロードされます。私の場合、変数を final として宣言し、final 属性を削除し、チェック クラスがロードされ、静的初期化子が実行されます。以下は変更されたコードです
class staticFinalDemo1 {
//static final int var= 100;
static int var= 100;
static final void test() {
System.out.println("Static Final Method Test");
}
static {
System.out.println("Static Initializer");
}
}
class staticFinalDemo2 {
public static void main(String[] args) {
System.out.println(staticFinalDemo1.var);
//staticFinalDemo1.test();
}
}
ここでのポイントは、最後のステートメントを変更して、次のステートメントに置き換える場合です。
static final Integer var= 100;
静的イニシャライザがロードされます。現在、この変数は定数です。この場合、静的初期化子をロードしているのはなぜですか? ラッパーオブジェクトを使用していて、クラスで使用のために参照するとそのインスタンスが初期化されるためですか? この概念を明確にしてください。
ベン