A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 苏乞儿 中级黑马   /  2014-9-14 02:02  /  916 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. <p>class X{
  2. Y b=new Y();
  3. X(){
  4.   System.out.println("X");
  5. }
  6. }
  7. class Y{
  8. Y(){
  9.   System.out.println("Y");
  10. }
  11. }
  12. class Z extends X{
  13. Y y=new Y();
  14. Z(){
  15.   super();
  16.   System.out.println("Z");
  17. }
  18. public static void main(String[] args){
  19.   new Z();
  20. }
  21. }</p><p>建立Z的对象,到Z的构造函数去初始化,执行super语句输出一个X,然后再执行super语句下一句输出一个Z不是吗?为什么输出的不是XZ?程序的运行是按照什么顺序进行的呢,还请大牛不吝赐教啊。。。
  22. </p>
复制代码

2 个回复

倒序浏览
我是这样理解的。
从主函数开始,创建了z的匿名对象,然后到z()里读,z先继承了x,到父类x()里先初始化,类x创建y对象,打印一个y,然后继续执行打印一个x,回到z函数中,先是建立了一个y的对象打印一个y。然后回到z继续执行。打印一个z。
回复 使用道具 举报
父类--静态变量
父类--静态初始化块
子类--静态变量
子类--静态初始化块
父类--变量
父类--初始化块
父类--构造器
子类--变量
子类--初始化块
子类--构造器

这是类加载顺序,记住了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马