Java面试题——类加载,构造器的调用

#记下笔记,便于复习
运行结果分析在注释中,大家可以参考着来看

public class MyXq {
    
    
	private static MyXq myxq = null;
	private SubClass sub = null;
	static {
    
    
		myxq = new MyXq();
		System.out.println(3);
	}

	MyXq() {
    
    
		sub = new SubClass();
		System.out.println(4);
	}

	public static void main(String[] args) {
    
    
		// TODO 自动生成的方法存根
		System.out.println("main");

	}

}

class SuperClass {
    
    
	SuperClass() {
    
    
		System.out.println("SuperClass构造器");
	}
}

class SubClass extends SuperClass {
    
    
	static {
    
    
		System.out.println(1);
	}

	SubClass() {
    
    
		super();
		System.out.println(2);
	}
}

/*结果分析:
 * 		1>首先进入main()方法入口,在执行main()之前,需要对自己的类进行类加载;
 * 		类加载的时候执行static{}代码块;
 * 		2>然后需要创建一个MyXq()对象,转到MyXq类的构造器;
 * 		3>然后需要创建一个SubClass()对象,转到SubClass类,首先需要对类进行加载,加载到内存中
 * 			所以在加载时执行static代码块————输出1;
 * 		4>然后进入SubClass类的构造器创建对象,Super()执行父类SuperClass的构造器;
 * 			————输出“SuperClass构造器”;
 * 		5>然后在SubClass的构造器中————输出2,sub对象创建完毕;
 * 		6>然后回到MyXq类的构造器,执行————输出4,myxq对象创建完毕;
 * 		7>然后回到MyXq类的静态代码块,执行————输出3;
 * 		8>最后回到main()方法,执行————输出"main";
 */

运行结果是这样的:
1
SuperClass构造器
2
4
3
main

可能有点地方表述不清楚,欢迎指正!

猜你喜欢

转载自blog.csdn.net/weixin_46250447/article/details/106771290