static 初期化子の実行タイミング
出力はどれか。
public class Main {
public static void main(String[] args) {
System.out.print("M ");
new Box();
new Box();
}
}
class Box {
static {
System.out.print("S ");
}
Box() {
System.out.print("C ");
}
}
- A
M S C C - B
S M C C - C
M S C S C - D
S C C M
正解と解説を見る
正解: A
- A: Box が初めて使われるのは "M" の後の new なので、そこで S が1回だけ出力され、コンストラクタの C が2回続きます。
- B: static 初期化子はクラスが初めて使われたときに実行されます。main の開始時ではありません。
- C: static 初期化子は1回だけ実行されます。
- D: main の最初の print が先に実行されます。
ポイント
- static 初期化子は、そのクラスが最初に使われたときに 1回だけ 実行されます。
- Box は main の途中で初めて使われるので、"M" の後に "S" が出ます。