先吐槽下,真坑爹,图片一直传入失败,我就把我的作图思路下一下了,新手遇到这样的题目抓着就是画图。
1,首先看main方法在哪个类里面,JVM加载Z.class进方法区,并且进行空间分配,执行静态方法,静态成员变量默认和显示初始化(没有就不执行),再就是静态代码块的执行(没有不执行,记住只执行一次);
2,从程序入口main方法开始,里面new了对象Z,把对象加载到堆内存里面,开辟空间给地址值(记住堆内存里面都是地址值),看是否有成员变量,并且默认初始化,发现题目里有成员变量y,默认为null,接着找Z的构造函数来给对象初始化。
3,找到构造函数Z(),构造函数里面都有默认的4个步骤,必须严格执行1,执行super()初始化。2,执行成员变量显示初始化 3,执行构造代码块初始化 4,执行构造函数自定义内容初始化
4,知道步骤后,我们先执行Z()里的super(),Z继承X,找X里面的构造函数X(),里面同样有上面的4步骤,super()忽略,成员变量b显示初始化new Y(),调用Y构造,输出Y,X类里面没有构造代码块,接着执行X构造里面的自己的内容,即输出了X
5,super()执行完成后,给Z成员变量显示初始化,同上,默认为null初始为Y的构造输出Y,Z类里面也没有构造代码块,不执行。
6,执行最后一步,构造方法里面的内容,即输出Z
综上 输出Y X Y Z
纯手打,看着会比较累,自己画图试试。
|