10
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Javaのイニシャライザーの話

Last updated at Posted at 2018-02-11

イニシャライザーとは?

クラス・インスタンスを使う前に一度実行される処理。
クラス変数を初期化するときなどに使う。

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回インスタンス化されました
↓
10
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?