クラス初期化子(class initializer) |
| |||
クラス初期化子は、クラス変数の初期化などの目的で利用できる。なお、クラス初期化子がチェック例外によって途中終了する可能性がある場合は、コンパイルエラーが発生する。クラス初期化子が正常終了できない場合は、コンパイルエラーとなる。satic ブロック
静的初期化子で行うのは、以下のことである。// 識別番号クラス 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月03日です。 aの識別番号:2010120301 bの識別番号:2010120302 cの識別番号:2010120303