>Java >java지도 시간 >Java에서 인스턴스 변수 초기화 및 생성자 실행의 올바른 실행 순서는 무엇입니까?

Java에서 인스턴스 변수 초기화 및 생성자 실행의 올바른 실행 순서는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-29 05:47:10612검색

What's the Correct Execution Order of Instance Variable Initialization and Constructor Execution in Java?

Java의 인스턴스 변수 초기화와 생성자 실행 비교

Java 객체 초기화에 대한 일반적인 오해 중 하나는 필드와 생성자가 실행되는 순서입니다. . 예를 들어 이 개념을 명확하게 설명하겠습니다.

주어진 코드 조각에서:

class X {
    Y b = new Y();

    X() {
        System.out.print("X");
    }
}

class Y {
    Y() {
        System.out.print("Y");
    }
}

public class Z extends X {
    Y y = new Y();

    Z() {
        System.out.print("Z");
    }

    public static void main(String[] args) {
        new Z();
    }
}

필드가 생성자보다 먼저 초기화된다는 가정과 달리 이 프로그램의 출력은 "YZX"입니다. 그 이유를 이해하려면 Java 초기화 프로세스를 자세히 살펴봐야 합니다.

초기화 순서:

Java는 특정 순서로 클래스를 초기화합니다.

  1. 정적 멤버: 텍스트의 정적 변수 및 초기화 프로그램 order.
  2. 생성자 호출: 명시적 또는 암시적 상위 생성자 호출.
  3. 인스턴스 변수 및 초기화 블록: 필드 및 인스턴스 초기화 블록 텍스트 순서.
  4. 생성자 본문: 남은 부분 super() 호출 후 생성자의 코드입니다.

위의 예에서 이벤트 순서는 다음과 같습니다.

  • Y의 생성자는 (Y)라고 합니다.
  • Z의 생성자는 X의 생성자(YZ)를 호출합니다.
  • X의 생성자는 호출됩니다. (XYZ).
  • X의 인스턴스 변수 b가 초기화됩니다(YZXb).
  • Z의 인스턴스 변수 y가 초기화됩니다(YZXby).

따라서 올바른 순서는 실행은 "YZX"입니다. 이는 객체 생성 시 예기치 않은 동작을 방지하기 위해 Java 초기화 순서를 이해하는 것이 중요하다는 점을 강조합니다.

위 내용은 Java에서 인스턴스 변수 초기화 및 생성자 실행의 올바른 실행 순서는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.