Java static初期化ブロックと初期化ブロックのサンプル

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

目次

static初期化ブロック

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

コード

サンプルのコードです。
5行目は、16行目のstaticメソッドを実行します。
その時に12-14行目のstatic初期化ブロックが実行され、変数num1に1がセットされます。
17行目で1が出力されます。

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

 

初期化ブロック

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

コード

サンプルのコードです。
5行目は、9行目のクラスのインスタンスを生成しています。
その時に13-15行目の初期化ブロックが実行され、変数num2に2がセットされます。
6行目のメソッドを実行すると2が出力されます。

package test1;
 
public class Test1 {
	public static void main(String[] args) {
		Sample s1 = new Sample();
		s1.print1();
 	}
}
class Sample {
	int num2;
	
	// 初期化ブロック  
	{
		num2 = 2;
	}

	void print1() {
		System.out.println(num2); //2
	}
}

 

実行する順番

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

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

コード

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

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

関連の記事

Java コンストラクタのサンプル
Java クラスの変数のサンプル(メンバー変数/ローカル変数)
Java 変数のデータ型とラッパークラス
Java staticメソッドとstatic変数のサンプル
Java staticインポートのサンプル
Java final修飾子のサンプル
Java abstract修飾子のサンプル

 はまったらエンジニア特化型Q&Aサイト
【teratail(テラテイル)】で質問しましょう!


△上に戻る