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(); } }
생성자가 인스턴스 전에 초기화된다는 가정 하에 예상되는 출력은 "XZYY"였습니다. 변수. 그러나 출력은 실제로 "YYXZ"입니다. 이러한 편차는 실제 초기화 순서를 이해하는 것이 중요함을 강조합니다.
Java Virtual Machine 사양에 따르면 초기화 순서는 다음과 같습니다.
이 경우 정적 변수 및 블록은 관련되지 않습니다. super() 호출은 클래스 Z의 생성자에서 암시적으로 발생하므로 코드에 표시되지 않습니다. 따라서 초기화 순서는 다음과 같습니다.
"YYXZ" 출력에 대해 설명합니다.
위 내용은 이 Java 프로그램이 'XZYY' 대신 'YYXZ'를 출력하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!