++2016.7.17
++by side @Java-加载顺序(1)
==================================
关于Java-加载顺序
下面是一个面试题
/* 输出打印
*/
public class Z extends X {
Y y=new Y();
Z(){
System.out.println("Z的构造方法");
}
public static void main(String[] args) {
new Z();
}
}
class X{
Y b=new Y();
X(){
System.out.println("X的构造方法");
}
}
class Y{
Y(){
System.out.println("Y的构造方法");
}
}
首先简单理解JVM加载的简单过程以本题为例
本题 加载过程简单描述一下:
步骤:
- 1.找到main()方法
- 2.加载Z的父类X到内存X.class,然后加载PrintDemo到内存Z.class
- 3.加载main()方法到栈
- 4.执行main()方法里的new Z();
- 5.执行Z父类X的构造方法,在此之前先加载X的成员Y b=new Y();
- 6.加载Y到内存Y.class执行Y的构造方法 //打印 Y的构造方法
- 7.再执行X的构造方法 //打印 X的构造方法
- 8.再执行Z的构造方法,在此之前先加载Z的成员Y y=new Y(); 执行Y的构造方法 //打印 Y的构造方法
- 9.打印 Z的构造方法
- 10.结束
显示结果:
显示结果==================================
@小怪兽
ps:因作者能力有限,有错误的地方请见谅
网友评论