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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

练习继承模块的代码时,编译时各种报错,诸如找不到成员变量等等,最终发现是因为不熟悉父子类加载过程,特别是构造方法/成员变量/静态成员变量/成员方法等元素加载的先后顺序,所以很有必要再总结一下加载过程,如下所示:
  • 运行main--->测试类中的main方法中创建子类对象new子类对象--->注意:子类对象真正处于运行期间,执行new 子类对象的时候, 才会将子类对应的字节码文件加载到内存中
  • 父类字节码文件加载到内存---> 加载父类中静态内容(变量、方法、静态代码块)【按代码从上往下顺序】
  • 子类字节码文件加载到内存---> 加载子类中静态内容(变量、方法、静态代码块)【按代码从上往下顺序】
  • 默认初始化父类变量--->给父类变量赋默认的初始化值
  • 默认初始化子类变量--->给子类变量赋默认的初始化值
  • 加载非静态父类成员方法--->因为只是加载到内存中,所以也可能是在默认初始化之前执行
  • 加载非静态子类成员方法--->因为只是加载到内存中,所以也可能是在默认初始化之前执行
  • 显示初始化父类成员(非静态变量、构造代码块)---->【按代码从上往下顺序】
  • 父类构造---->执行父类中的构造方法
  • 显示初始化子类成员(非静态变量、构造代码块)---->【按代码从上往下顺序】
  • 子类构造--->执行子类中的构造方法
  • 运行main中new对象后的语句--->程序结束
记好这12步,掌握java运行 的原理,能轻松应付各种面试笔试题,并且为学习后面更复杂的做好理论知识储备。


2 个回复

倒序浏览
学习了,感谢啊,大神~~~
回复 使用道具 举报
好详细啊,谢谢大神。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马