私の歴史と今

振り返ると恥ずかしくなるのが私の歴史。だけどそのときは真面目に書いていた訳でね。そんな今の私を書いていく。

クラス初期化子とインスタンス初期化子ってあまり見たことないなあ

来週のJava講習のために「明解Java」を読んでいるんだけど、クラス初期化子とインスタンス初期化子って実務であまり使ったことがない。JDBCドライバのロード時にクラス初期化子が使われているのは知ってるけど、インスタンス初期化子は見たことすらない。
インスタンス初期化子はコンストラクタで代用できるから特に必要性はないように思う。クラス初期化子は代用がない。

class Hoge{
    // クラス変数
    private static String className;
    // クラス初期化子(クラスロード時に呼び出される)
    static{
        className= "Hoge";
    }

    // インスタンス変数
    private String name;
    // インスタンス初期化子(コンストラクタのsuper()呼び出し後、実行される)
    {
        name = "ken";
    }

    public static void main(String[] args){
        System.out.printf("className=%s\n", className); // className=Hoge
        Hoge hoge= new Hoge();
        System.out.printf("name=%s", hoge.name);        // name=ken
    }
}
// ※注意 上記の用途であれば、下記のように宣言と同時に初期化すればよい。
// private static String className = "Hoge";
// private String name = "ken";

教える責任を負うようになってから、言語仕様を学ぶことに面白さを感じるようになってきた。昔は、同期に負けたくなかったから言語仕様を学んだけど、いまは違うなあ。さあ寝よう。

実は、この本、レイアウトは好きになれないけど、わかりやすい。

明解Java 入門編

明解Java 入門編