クラス初期化子とインスタンス初期化子ってあまり見たことないなあ
来週の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";
教える責任を負うようになってから、言語仕様を学ぶことに面白さを感じるようになってきた。昔は、同期に負けたくなかったから言語仕様を学んだけど、いまは違うなあ。さあ寝よう。
実は、この本、レイアウトは好きになれないけど、わかりやすい。
- 作者: 柴田望洋
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2007/08/08
- メディア: 単行本
- 購入: 16人 クリック: 271回
- この商品を含むブログ (49件) を見る