mutao.net

いわゆる雑記。

staticイニシャライザ

  • クラスを利用するときに一度だけ呼び出される初期化ブロック
  • オブジェクトの初期化時ではなく、クラス自身の初期化時に実行される
  • 複数のstaticイニシャライザが定義されている場合はコードに書かれた順序で事項される
  • JVMによって自動的に実行されるメソッドであり、任意に実行できるメソッドではない
  • staticイニシャライザを処理している最中にエラーが発生した場合、 ExceptionInitializetionError を発生させる
  • staticイニシャライザは複数記述することができ、上から順に実行される
public class Main {
  private static String test;
  static {
    test = "Hello World!";
  }
  public static void main(String[] args){
    System.out.println(test);
  }
}

インスタンス化したときの実行順序

  • 変数testに aaaaa が代入される
  • staticイニシャライザ(初期化ブロック)が実行される
  • コンストラクタの呼び出し
public class Main {
  private static String test = "aaaaaa";
  static {
    System.out.println("initialize");
    test = "Hello World!";
  }
  public Main(){
    System.out.println("exec constructor");
  }
  public static void main(String[] args){
    Main sample = new Main();
    System.out.println(sample.test);
  }
}
  • 実行結果
initialize
exec constructor
Hello World!