クラス初期化子

別名、静的初期化子。

  1 public class Hello {
  2   //フィールド
  3   
  4   
  5   //コンストラクタ
  6   
  7   
  8   //クラス初期化子
  9   static {
 10     System.out.println("Hello World");
 11   }
 12   
 13   
 14   //メソッド
 15 
 16 }

クラス内のフィールド、コンストラクタ、メソッドの記述は省略。

  1 public class HelloTest {
  2   
  3   public static void main(String[] args) {
  4     Hello hello  = new Hello();
  5     Hello hello2 = new Hello();
  6   }
  7   
  8 } 

実行結果

$ javac Hello.java
$ javac HelloTest.java
$ java HelloTest
Hello World
$

クラス初期化子の実行タイミング

クラスが初めて利用されるとき

注意事項

クラス初期化子は一度だけ

クラス初期化子は一度しか実行されない

クラスHelloTestでは以下のように、クラスHelloに2度関わっている。

Hello hello  = new Hello();
Hello hello2 = new Hello();

しかし、実行結果を見て分かるように、"Hello World"は一度しか出力されていない。

クラス初期化子内ではreturn文やthisやsuperは利用できない