黑马程序员技术交流社区
标题:
继承中父子类在内存中加载的过程详解
[打印本页]
作者:
307117758
时间:
2015-10-19 16:32
标题:
继承中父子类在内存中加载的过程详解
练习继承模块的代码时,编译时各种报错,诸如找不到成员变量等等,最终发现是因为不熟悉父子类加载过程,特别是构造方法/成员变量/静态成员变量/成员方法等元素加载的先后顺序,所以很有必要再总结一下加载过程,如下所示:
运行main--->测试类中的main方法中创建子类对象new子类对象--->注意:子类对象真正处于运行期间,执行new 子类对象的时候, 才会将子类对应的字节码文件加载到内存中
父类字节码文件加载到内存---> 加载父类中静态内容(变量、方法、静态代码块)【按代码从上往下顺序】
子类字节码文件加载到内存---> 加载子类中静态内容(变量、方法、静态代码块)【按代码从上往下顺序】
默认初始化父类变量--->给父类变量赋默认的初始化值
默认初始化子类变量--->给子类变量赋默认的初始化值
加载非静态父类成员方法--->因为只是加载到内存中,所以也可能是在默认初始化之前执行
加载非静态子类成员方法--->因为只是加载到内存中,所以也可能是在默认初始化之前执行
显示初始化父类成员(非静态变量、构造代码块)---->【按代码从上往下顺序】
父类构造---->执行父类中的构造方法
显示初始化子类成员(非静态变量、构造代码块)---->【按代码从上往下顺序】
子类构造--->执行子类中的构造方法
运行main中new对象后的语句--->程序结束
记好这12步,掌握java运行 的原理,能轻松应付各种面试笔试题,并且为学习后面更复杂的做好理论知识储备。
作者:
heima117
时间:
2015-10-19 16:33
学习了,感谢啊,大神~~~
作者:
nulixuec
时间:
2015-10-19 16:43
好详细啊,谢谢大神。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2