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"입니다.
이 출력은 필드 초기화(예: 'b)로 인해 예상 순서와 모순됩니다. ' 및 'y')는 생성자 본문(예: 'X()' 및 'Z()').
JVM Spec(Java Virtual Machine Spec)에서는 초기화 순서를 다음과 같이 명시하고 있습니다.
따라서 제공된 코드에서 인스턴스 변수 'b' 및 'y' 'X' 및 'Z'의 생성자 본문이 실행되기 전에 초기화되어 "YYXZ"가 출력됩니다.
위 내용은 Java에서 필드 초기화 및 생성자 실행의 실제 순서는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!