Javaの非静的ブロックの実行順序は?コンストラクターとの実行タイミングを解説
Javaでは、オブジェクトが生成されるたびに、非静的ブロック(インスタンス初期化ブロック)がコンストラクターの実行前に必ず呼び出されます。この記事では、非静的ブロックの特徴と実行順序について、コード例とともに解説します。
非静的ブロックとは
- 非静的ブロックは、メソッドのような宣言(プロトタイプ)を持たない、クラスレベルのブロックです。
- どのコンストラクターが使用されたかにかかわらず、オブジェクト生成時に共通のロジックを実行したい場合に活用できます。
- 非静的ブロックはJVMによって自動的に呼び出され、Javaスタック領域でオブジェクトが生成されるたびに実行されます。
- Javaでは、非静的ブロックはいくつでも定義することが可能です。
- 実行順序は、ソースコード内で定義された順番どおりになります。
コード例
public class NonStaticBlockTest {
{
System.out.println("First Non-Static Block"); // 最初の非静的ブロック
}
{
System.out.println("Second Non-Static Block"); // 2番目の非静的ブロック
}
{
System.out.println("Third Non-Static Block"); // 3番目の非静的ブロック
}
NonStaticBlockTest() {
System.out.println("Execution of a Constructor"); // コンストラクター
}
public static void main(String args[]) {
NonStaticBlockTest nsbt1 = new NonStaticBlockTest();
NonStaticBlockTest nsbt2 = new NonStaticBlockTest();
}
}
実行結果
First Non-Static Block Second Non-Static Block Third Non-Static Block Execution of a Constructor First Non-Static Block Second Non-Static Block Third Non-Static Block Execution of a Constructor
この実行結果から、次のことが確認できます。mainメソッド内で2つのオブジェクト(nsbt1とnsbt2)を生成していますが、それぞれのオブジェクト生成時に、3つの非静的ブロックが定義された順番(最初→2番目→3番目)で実行され、その後にコンストラクターが実行されています。つまり、非静的ブロックはオブジェクトごとに毎回実行され、その実行順序は常に記述順に従うというのがJavaの仕様です。
-
Javaクラスの静的メンバーはどのような順序で読み込まれる?JVMの処理手順を解説
Javaにおいて、静的変数(static変数)はクラスがロードされるタイミングで生成されます。これは静的ブロック(staticブロック)が実行されるよりも前の段階であり、静的ブロックの主な役割は静的変数に値を代入することです。静的変数には、定義されたクラスのすべてのインスタンス間で共有される値が格納されます。一方、静的ブロックとは、クラスが最初にロードされるときに一度だけ実行されるコード領域のことです。したがって、クラスロード時に実行したい初期化処理やロジックがある場合は、その処理を静的ブロック内に記述しておくことで、クラスのロード時に確実に実行させることができます。JVMが静的メンバーを読み
-
【Java】1つのtryブロックに複数のcatchブロックを定義する方法と優先順位の仕組み
はい、Javaでは1つのtryブロックに対して複数のcatchブロックを定義できます。これにより、発生しうる例外の種類ごとに異なる処理を記述でき、よりきめ細かいエラーハンドリングが可能になります。 複数のcatchブロックを使う際の基本ルール すべてのtryブロックには、必ず少なくとも1つのcatchブロック(またはfinallyブロック)を関連付ける必要があります。 tryブロック内で例外オブジェクトが検出されると、JVMはcatchブロックを記述された順序(上から下へ)で照合していきます。 最優先で判定されるのは常に最初のcatchブロックです。最初のcatchブロックでその例外を処理