イニシャライザーとは?
クラス・インスタンスを使う前に一度実行される処理。
クラス変数を初期化するときなどに使う。
class initializer_demo {
// クラスイニシャライザー
static {
// 処理
}
// インスタンスイニシャライザー
{
// 処理
}
}
インスタンスイニシャライザーとコンストラクタとの違いは?
インスタンス化する時の処理といえばコンストラクタが思い浮かびますが、
インスタンスイニシャライザーはコンストラクタの前に実行され、コンストラクトはインスタンス化した後に実行されるという違いがあるそうです。
コンストラクタがオーバーロードされて複数ある場合、イニシャライザーは共通処理をまとめ先に実行するなどして使うらしいです。
以下参考コード
class User {
private String name;
public static int count;
// クラスイニシャライザー
static {
User.count = 0;
System.out.println("クラスイニシャライザー実行\n↓");
}
// インスタンスイニシャライザー
{
System.out.println("インスタンスイニシャライザー実行\n↓");
}
// コンストラクター
public User(String name) {
this.name = name;
User.count++;
System.out.println("コンストラクター実行\n↓");
}
// クラス・メソッド
public static void getInfo() {
System.out.println(User.count + "回インスタンス化されました\n↓");
}
}
public class MyApp {
public static void main(String[] args) {
User.getInfo();
User ryo = new User("ryo");
User.getInfo();
User yu = new User("yu");
User.getInfo();
}
}
実行結果
$ java Myapp
クラスイニシャライザー実行
↓
0回インスタンス化されました
↓
インスタンスイニシャライザー実行
↓
コンストラクター実行
↓
1回インスタンス化されました
↓
インスタンスイニシャライザー実行
↓
コンストラクター実行
↓
2回インスタンス化されました
↓