이 기사에서 제공하는 내용은 가상 머신의 관점에서 클래스의 인스턴스화 순서에 대한 Java의 분석입니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
1. 먼저 예제 코드(Son.java & Father.java)를 보여줍니다.
public class Father { public static int a=10;//父类的静态变量 static{//父类的静态代码块 a=20; } {//父类的构造代码块 a=30; } public Father() {//父类的构造方法 a=40; } }
public class Son extends Father{ public static int s=10;//子类的静态变量 public int k=20;//子类的实例变量 static{//子类的静态代码块 s=20; } {//子类的构造代码块 s=30; } public Son() {//子类的构造函数 s=40; } {//子类的构造代码块 s=50; } }
2. son.java 파일을 son.class 파일로 컴파일한 다음 javap를 사용하여 Son의 바이트코드 명령어를 분석합니다. 로딩 순서는 이해하기 더 쉽습니다(javap -v -c Son > p.txt).
3. "new Son();" 코드를 실행한 후 클래스 로딩 순서를 분석합니다.
아래의 static{};은
static {}; descriptor: ()V flags: ACC_STATIC Code: stack=1, locals=0, args_size=0 0: bipush 10 2: putstatic #11 // Field s:I--------------------------顺序执行静态变量的赋值 5: bipush 20 7: putstatic #11 // Field s:I--------------------------顺序执行静态代码块 10: return
public packet1020.Son(); descriptor: ()V flags: ACC_PUBLIC Code: stack=2, locals=1, args_size=1 0: aload_0 1: invokespecial #16 // Method packet1020/Father."<init>":()V--------------------执行父类的<init>函数(顺序不变,第一个) 4: aload_0 5: bipush 20 7: putfield #18 // Field k:I------------------------------------------------按顺序收集实例变量赋值 10: bipush 30 12: putstatic #11 // Field s:I------------------------------------------------按顺序收集构造代码块 15: bipush 50 17: putstatic #11 // Field s:I------------------------------------------------按顺序收集构造代码块 20: bipush 40 22: putstatic #11 // Field s:I------------------------------------------------最后执行自己的构造函数代码(顺序不变,最后一个) 25: return
분석 시작:
1. 초기화 단계에서 먼저 상위 클래스
2. 코드에서 생성자가 실행되므로
결론:
1. 정적 변수 할당과 정적 코드 블록은 상위 클래스에서 순차적으로 실행됩니다
2. 정적 변수 할당과 정적 코드 블록은 하위 클래스에서 순차적으로 실행됩니다
3. 상위 클래스 코드 블록
4. 상위 클래스 생성자
5. 하위 클래스에서 인스턴스 변수 할당을 순차적으로 실행하고 코드 블록을 구성합니다.
6. 하위 클래스 생성자
이름 설명: "심층 이해"에서 발췌 Zhou Zhiming 선생님의 "Java Virtual Machine": JVM 고급 기능 및 모범 사례》
1. 클래스를 초기화해야 하는 상황은 4가지뿐입니다(
2.
3.
구성 코드 블록의 실행 순서는 생성자보다 우선합니다.
<init>(){ 1.调用父类<init>方法 2.顺序执行实例变量的赋值操作和构造代码块 3.程序员自己的构造函数方法代码 }
요약: 위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되기를 바랍니다. 더 많은 관련 튜토리얼을 보려면 Java 비디오 튜토리얼, Java 개발 그래픽 튜토리얼, bootstrap 비디오 튜토리얼을 방문하세요!
위 내용은 Java는 가상 머신 관점에서 클래스의 인스턴스화 순서가 무엇인지 분석합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!