初期化ブロックと静的初期化ブロック、コンストラクタなど実行されるタイミングが異なりややこしいので簡単に例を書きます。
1 2 3 4 5 6 7 8 9 10 11 12 |
public class Sample { //コンストラクタ public Sample() { System.out.println("コンストラクタ"); } //初期化ブロック { System.out.println("初期化ブロック"); } } |
1 2 3 4 5 6 |
public class Main public static void main(String[] args) { System.out.println("Main関数"); new.Sample(); } |
結果
1 2 3 |
Main関数 初期化ブロック コンストラクタ |
Main関数が実行され初期化ブロック、コンストラクタの順に実行されます。
それに対し静的初期化ブロックは
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class Sample { //コンストラクタ public Sample() { System.out.println("コンストラクタ"); } //初期化ブロック { System.out.println("初期化ブロック"); } //静的初期化ブロック static { System.out.println("静的初期化ブロック"); } } |
結果
1 2 3 4 5 6 |
public class Main public static void main(String[] args) { System.out.println("Main関数"); new.Sample(); } |
1 2 3 4 |
静的初期化ブロック Main関数 初期化ブロック コンストラクタ |
先に静的初期化ブロックが実行されMain関数、初期化ブロック、コンストラクタの順に実行されます。