Javaクラスの初期化手順

Javaクラスの初期化処理には、以下のような手順があります:

  1. クラスのロード:Java 仮想マシンは、プログラム内で特定のクラスが使用された時点で、クラスローダーを使用し、そのクラスのバイトコードファイルをメモリにロードします。
  2. リンクとは、Java仮想マシンの実行環境にロードされるクラスを統合するためのプロセスで、検証・準備・解決の3つの段階に分けられます。
  3. 検証:Java仮想マシン仕様に準拠していることを検証する(セキュリティ検証やバイトコードの検証など)。
  4. 準備: クラスの静的変数のメモリを確保し、初期値を設定する。例えば、基本型の変数は0、参照型はnullに設定される。
  5. コンセントレイト:定数プール内のシンボル参照をダイレクト参照に置き換えます。これは将来のダイナミックリンクとランタイム時の呼び出しを準備するものです。
  6. 初期化:クラスの準備フェーズが終了した後に、クラスの初期化操作が実行されます。これには、静的変数への値の割り当てと、静的コードブロックの実行が含まれます。
  7. 代入:あらかじめ決まった値を、プログラム内で割り当てられた変数にセットすること。
  8. 静的コードブロックの実行: クラス内の静的コードブロックを実行し、静的コードブロック内のコードは、クラス内の順番に実行されます。

なお、クラスの初期化処理はクラスを利用するタイミングでのみ行われ、しかもそのクラスは一度だけ初期化されます。また、子クラスが初期化されると親クラスの初期化処理も行われます。すなわち、親クラスのstaticコードブロックは子クラスのstaticコードブロックよりも先に実行されます。

bannerAds