문제 16정답을 고른 뒤 해설을 펼쳐보세요.

다음 Java 프로그램의 출력 결과는?

class ClassA {

ClassA() {

System.out.print("1");

}

static {

System.out.print("4");

}

}

public class ClassB extends ClassA {

ClassB() {

System.out.print("2");

}

public static void main(String[] args) {

System.out.print("3");

new ClassB();

}

}

  1. ①
    32
    정답
  2. ②
    432
    정답
  3. ③
    3214
    정답
  4. ④
    4312
    정답
정답·해설 펼치기정답·해설 접기
정답 ④Java 초기화 순서

정답: 공식 최종정답 기준 · 검수 방식

정답 근거

정답은 ④입니다. main 메서드를 실행하려면 먼저 ClassB 클래스가 초기화되어야 하고, 하위 클래스가 초기화되기 전에 상위 클래스 ClassA가 먼저 초기화됩니다. 이때 ClassA의 static 블록이 실행되어 4가 출력됩니다. 이어서 main이 3을 출력하고, new ClassB()가 실행되면 상위 생성자 ClassA()가 먼저 호출되어 1, 그다음 ClassB()가 2를 출력합니다. 결과는 4312입니다.

보기별 검토

✗① static 블록과 상위 생성자 호출을 모두 빠뜨렸습니다.

✗② 상위 생성자의 1을 빠뜨렸습니다.

✗③ static 블록이 객체 생성 뒤에 실행된다고 보아 틀렸습니다.

✓④ 4312이므로 옳습니다.

풀이 요령 · 관련 개념

풀이 요령: Java 실행 순서는 「상위 클래스 static → 하위 클래스 static → main → 상위 생성자 → 하위 생성자」입니다. static 블록은 클래스가 처음 로딩될 때 단 한 번 실행됩니다.