Javaの初期化ブロックとstatic初期化ブロックの使い方と実行順序の紹介です。
🗽初期化ブロック
初期化ブロックを使うとオブジェクトの初期化を行うことができます。
import java.util.Date; publicclassSample{ privatefinal Date date; { System.out.println("初期化ブロックの実行"); date =new Date(); } public DategetDate(){ returnthis.date; } publicstaticvoidmain(String[] args){ Sample sample =new Sample(); System.out.println(sample.getDate().toString()); } }
|
実行結果は次のとおりです。
初期化ブロックの実行 Sat Apr 22 09:20:20 JST 2017
|
初期化ブロックとコンストラクタの役割はほぼ同じですが、初期化ブロックの特徴は次のとおりです。
- すべてのコンストラクタの共通処理を記述可能
- 匿名クラスの初期化に使用(匿名クラスにはコンストラクタがないため)
Map map =new HashMap() { { put(key1, value1); put(key2, value2); } }
|
🐝static初期化ブロック
static初期化ブロックを使うと、クラスの初期化時に実行できます。
import java.util.Date; publicclassSample{ privatestaticfinal Date date; static { System.out.println("static 初期化ブロックの実行"); date =new Date(); } publicstaticvoidmain(String[] args){ System.out.println(date.toString()); } }
|
実行結果は次のようになります。
static 初期化ブロックの実行 Sat Apr 22 09:33:38 JST 2017
|
🍮初期化の順序
初期化ブロックやコンストラクタなどの初期化処理は次の順序で実行されます。
- フィールド変数へのデフォルト値の代入
- static初期化ブロックを親クラス(上)から順に実行
- 初期化ブロックを親クラス(上)から順に実行
- コンストラクタの呼び出し
classSuperClass{ static { System.out.println(SuperClassのstatic初期化ブロック); } { System.out.println(SuperClassの初期化ブロック); } publicSuperClass(){ System.out.println(SuperClassのコンストラクタ); } }
classChildClassextendsSuperClass{ static { System.out.println(ChildClassのstatic初期化ブロック); } { System.out.println(ChildClassの初期化ブロック); } publicChildClass(){ System.out.println(ChildClassのコンストラクタ); }
publicstaticvoidmain(String[] args){ ChildClass child =new ChildClass(); System.out.println(mainメソッドの実行); } }
|
実行結果は次のようになります。
SuperClassのstatic初期化ブロック ChildClassのstatic初期化ブロック SuperClassの初期化ブロック SuperClassのコンストラクタ ChildClassの初期化ブロック ChildClassのコンストラクタ mainメソッドの実行
|
🎂参考リンク
🖥 VULTRおすすめ
「VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。 最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!