インスタンスイニシャライザとスタティックイニシャライザ
クラスはメンバ以外の要素(コンストラクタなど)+メンバ(フィールドとメソッドや別のクラス)で形成されます。メンバ以外の要素にはコンストラクタとインスタンスイニシャライザ(instance initializer)とスタティックイニシャライザ(static initializer)の3つしかありません。
イニシャライザとは初期化文という意味です。オプションなので、クラスの必須項目ではないわけです。コンストラクタも必要なければ省略できちゃうんです。もう一つ特徴があって、クラスを元に作られるサブクラス(子クラス)には継承されません。親クラスにのみ適用となります。
- インスタンスイニシャライザ
クラスのインスタンス、すなわちオブジェクトが作られるときになにかの値を初期化するために真っ先に(コンストラクタよりも先に!)実行されます。
下記の例のようにクラスの宣言の冒頭部分にどのメソッドにも属さない実行文として書きます。スタティックイニシャライザもそうなんですが、必ず{}ブロックの中に書かなければいけません。
public class Wow{ { double discount = 0.05 int limit = 5000; } // これ以降にフィールド、コンストラクタ、メソッドなどを書く。 }
- スタティックイニシャライザ
staticという言葉が付いていることから想像できるようにそのクラスのオブジェクトがまだ一つも無い段階でクラスがメモリにダウンロードされるときに真っ先に(main()メソッドよりも先に!)実行されます。
public class Bom{ static{ setupDatabase(); if(testConnection == false){ printMessage("do not connect databases"); } } // これ以降にフィールド、コンストラクタ、メソッドなどを書く }