Java static初期化ブロックと初期化ブロック

static初期化ブロックと初期化ブロックのサンプルです。

目次

サンプル static初期化ブロック
  初期化ブロック
  static初期化ブロックと初期化ブロックが実行される順番

static初期化ブロック

static{
}
    • static初期化ブロックは、以下の時に実行されます。
      →staticメソッドやstatic変数に最初にアクセスした時
      →クラスのインスタンスを最初に生成する時
    • 「{」(波括弧) から「}」までをブロックと言います。
    • static初期化ブロックは、staticイニシャライザとも呼ばれます。

static初期化ブロックのサンプルです。

package test1;
 
class Sample {
	static final int num1;
	static{
		num1 = 1;
	}
	static void print1() {
		System.out.println(num1); //1
	}
}
public class Test1 {
	public static void main(String[] args) {
		Sample.print1();  
 	}
}

14行目は、8行目のstaticメソッドを実行します。
その時に5~7行目のstatic初期化ブロックが実行され、変数num1に1がセットされます。
9行目で1が出力されます。

 

初期化ブロック

{  
}
  • インスタンスが生成されるごとに実行されるブロックです。
  • 「{」(波括弧) から「}」までをブロックと言います。
  • 初期化ブロックは、インスタンスイニシャライザとも呼ばれます。

初期化ブロックのサンプルです。

package test1;
 
class Sample {
	int num2;
	{
		num2 = 2;
	}
	void print1() {
		System.out.println(num2); //2
	}
}
public class Test1 {
	public static void main(String[] args) {
		Sample s1 = new Sample();
		s1.print1();
 	}
}

14行目は、3行目のクラスのインスタンスを生成しています。
その時に5~7行目の初期化ブロックが実行され、変数num2に2がセットされます。
8行目のメソッドを実行すると2が出力されます。

 

static初期化ブロックと初期化ブロックが実行される順番

実行される順番は以下のとおりです。

1.static初期化ブロックが実行されます。クラスが呼ばれる1回目のみ実行されます。
2.初期化ブロックが実行されます。クラスのインスタンスが生成される毎に実行されます。
3.コンストラクタが実行されます。クラスのインスタンスが生成される毎に実行されます。

実行する順番のサンプルです。

package test1;
 
class Sample{
	// static初期化ブロック  
	static{
		System.out.println("111");;
	}
	// 初期化ブロック  
	{
		System.out.println("222");;
	}
	// コンストラクタ
	Sample() {
		System.out.println("333");
	}
}
public class Test1 {
	public static void main(String[] args) {
		new Sample(); // 111 222 333
		new Sample(); // 222 333
 	}
}

19行目のクラスのインスタンス生成時は、static初期化ブロック、初期化ブロック、コンストラクタの順番で実行されます。111,222,333が出力されます。
20行目のクラスのインスタンス生成時は、初期化ブロック、コンストラクタの順番で実行されます。222,333が出力されます。static初期化ブロックは実行されません。

関連の記事

Java コンストラクタのサンプル
Java staticメソッド/変数 (newしないで使用できる)
Java インポートとstaticインポートのサンプル(import)
Java finalのサンプル(定数として使用/継承不可)

△上に戻る