BohYoh.comトップページへ  クラス初期化子(class initializer) 
Java講座 用語集   索引へ戻る   Java講座のページ


クラス初期化子(class initializer)



 以下のタイミングで実行される、クラスを初期化するためのコードのこと。  すなわち、何らかの形で、そのクラスを初めて利用する時点までに実行されるコードである。クラス宣言の中で、以下の形式で記述するため、静的初期化子、あるいは静的ブロックとも呼ばれる。

satic ブロック

 クラス初期化子は、クラス変数の初期化などの目的で利用できる。なお、クラス初期化子がチェック例外によって途中終了する可能性がある場合は、コンパイルエラーが発生する。クラス初期化子が正常終了できない場合は、コンパイルエラーとなる。
 なお、クラス初期化子は、メソッドではないので、return文を置くことはできないし、thisやsuperを利用することもできない。また、クラスのメンバではないため、サブクラスに継承されることはない。
 以下に示すのが、クラス初期化子を利用したプログラム例である(柴田望洋著『明解Java入門編』p.365より抜粋したもの。)。

// 識別番号クラス import java.util.GregorianCalendar; import static java.util.GregorianCalendar.*; class DateId { private static int counter; // 何番までの識別番号を与えたか private int id; // 識別番号 static { GregorianCalendar today = new GregorianCalendar(); int y = today.get(YEAR); // 年 int m = today.get(MONTH) + 1; // 月 int d = today.get(DATE); // 日 System.out.printf("今日は%04d年%02d月%02d日です。\n", y, m, d); counter = y * 1000000 + m * 10000 + d * 100; } //-- コンストラクタ --// public DateId() { id = ++counter; // 識別番号 } //--- 識別番号を取得 ---// public int getId() { return id; } } public class DateIdTester { public static void main(String[] args) { DateId a = new DateId(); DateId b = new DateId(); DateId c = new DateId(); System.out.println("aの識別番号:" + a.getId()); System.out.println("bの識別番号:" + b.getId()); System.out.println("cの識別番号:" + c.getId()); } }

 静的初期化子で行うのは、以下のことである。  このプログラムを、2010年12月3日に実行すると、静的初期化子の実行によってクラス変数counterに代入される値は、2010120300となるため、a, b, cの各インスタンスに与えられる識別番号は、2010120301, 2010120302, … となる。そのため、以下のように表示される(緑色の部分は、プログラム実行時の日付に依存)。

今日は20101203日です。 aの識別番号:2010120301 bの識別番号:2010120302 cの識別番号:2010120303



索引へ戻る

BohYoh.comトップページへ