IThaiのブログ

IT関連の話題やタイに関する様々なことを書いていきます。

Javaの初期化ブロック、コンストラクタについて学ぶ

IT業界に携わってから3年目になり、 研修時に習っただけで後はOJTで勉強してきたJavaですが、 Javaの効率的な実装や動作を理解しないままだったので、 Javaとオブジェクト指向について学び直しています。

今回は担当している仕事でJavaの初期化ブロックをみることがあったので、 この機会に初期ブロック、コンストラクタの動作について学んでみます。

昔買って100ページくらい読んで読まないままだったパーフェクトJava本を参考にしてみます。

初期化ブロックとは
・初期化ブロックはオブジェクトの初期化を行う
・クラスにいくつでも定義できる
・上から順に実行される

コンストラクタとは
・オブジェクト生成時に呼ばれる処理
・クラス名と一致させる

ここらへんをどう利用して実装するかが知りたいのですが、、なかなか良いソースがありませんでした。

また、この2つがオブジェクト作成時にどう振る舞うのかを読み進めていくと、 オブジェクト初期化時に走る処理としては、
1. フィールド変数にデフォルト値代入
2. 初期化ブロックを上から実行
3. コンストラクタ呼び出し
の順で実行されるみたいです。

実際に以下のコードで検証してみると、

class Main {
    // フィールド変数
    int i = 1;
    // コンストラクタ
    Main() {
        i = 2;
    }
    // 初期化ブロック
    {
        System.out.println(i);
    }
}

上記のコードでは1が出力されました。

オブジェクト作成時に初期化ブロックとコンストラクタがどの順で実行されるのかは分かったので、今度はこの2つの使いどころを色々探ってみようと思います。

改訂2版 パーフェクトJava

改訂2版 パーフェクトJava