Java プログラムが次の 6 つのメソッドを通じて初めてクラスまたはインターフェイスを使用するとき、システムはクラスまたはインターフェイスを初期化します。
(1) クラスのインスタンスを作成します。クラスのインスタンスを作成する方法には、new 演算子を使用したインスタンスの作成、リフレクションによるインスタンスの作成、逆シリアル化によるインスタンスの作成などがあります。
(2) あるクラスのクラスメソッド(静的メソッド)を呼び出します。
(3) 特定のクラス変数または特定のクラス変数にアクセスします。または、変数
に値を代入します (4) リフレクションを使用して、特定のクラスまたはインターフェイスに対応する java.lang.Class オブジェクトの作成を強制します。例: Class,forName("Person")。システムが Person クラスを初期化していない場合、最初に Person クラスを初期化してから、その Person クラスに対応する java.lang.Class オブジェクトを返します。
(5) あるクラスのサブクラスを初期化します。サブクラスのすべての親クラスが初期化されます。
(6) java.exe コマンドを直接使用してメインクラスを実行すると、メインクラスが最初に初期化されます。
注:
最終的なクラス変数の場合、変数の値がコンパイル中に決定できる場合、このクラス変数は「マクロ変数」と同等であり、Java コンパイラーはこのクラス変数を直接「すべて置換」に変換します。発生とその値。したがって、プログラムで静的変数を使用しても、クラスは初期化されません。次のコードは、静的初期化ブロックを出力しません
public class Test12 { static final String STRING="宏变量"; static{ System.out.println("静态初始化块"); } } class Test13{ public static void main(String[] args) { System.out.println(Test12.STRING); } }
逆に、最終的に変更されたクラス変数がコンパイル時に決定できない場合、クラス変数の値は実行時まで待たなければなりません。そのクラス変数がクラスを通じてアクセスされると、クラスは初期化されます。 。 (次のコードは静的初期化ブロックを出力します)
public class Test12 { static final String STRING=""+System.currentTimeMillis(); static{ System.out.println("静态初始化块"); } } class Test13{ public static void main(String[] args) { System.out.println(Test12.STRING); }
関連する推奨事項:
以上がJavaクラスの初期化はいつ実行されますか? (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。