次のコードの出力結果を答えてください。
public class AbcdExample {
static {
System.out.println("ABCD");
}
public static void main(String[] args) {
System.out.println("EFGH");
AB member = new AB();
AB number = new AB();
}
}
class AB {
AB() {
System.out.println("AB");
}
{
System.out.println("CD");
}
static {
System.out.println("EF");
}
}
正解
↓
↓
↓
↓
↓
↓
↓
ABCD
EFGH
EF
CD
AB
CD
AB
-
abcdExample クラスの静的初期化子が実行されます。静的初期化子はクラスがロードされる際に一度だけ実行されます。そのため、最初に "ABCD" が出力されます。
-
main メソッドが実行されます。"EFGH" が出力されます。
-
AB クラスの静的初期化子が実行されます。同様に、これもクラスがロードされる際に一度だけ実行されます。そのため、"EF" が出力されます。
-
AB クラスのインスタンス member が生成されます。この時点で、インスタンス初期化子(インスタンスブロック)が実行され、"CD" が出力されます。次に、コンストラクタが実行され、"AB" が出力されます。
-
同様に、AB クラスのインスタンス number が生成されます。これも同じく、インスタンス初期化子が実行され、"CD" が出力され、その後コンストラクタが実行され、"AB" が出力されます。