本帖最后由 陈文广 于 2016-4-23 20:36 编辑
这个题目考的是 面向对象的继承关系中 子父类的 创建对象的时候 程序执行的流程问题:首先:我们要知道一个程序要执行,首先JVM会去找main方法的入口,
1.这样会将main方法的所在的类的字节码文件加载进内存:main方法所在的类B的静态代码块会被执行因为静态代码块会随着类的加载而加载
但是如果main方法所在的类B又继承了某个类A,那么类A的静态代码块会在类B的静态代码块执行前先执行. 因为java会先加载好父类后再加载子类
父类初始完毕后再初始化子类
2.在加载字节文件的同时 JVM会将所涉及到的类的 各个属性和方法都加载进内存 这其中就涉及到了 各个类的属性 的默认化 了 ,它是在创建对象之前就完成了的
并且是在本类的构造代码块之前就执行完毕
3.在创建对象之前 还有一步是 代码执行到的地方涉及到各个类的属性会显示初始化
4.默认初始化->显示初始化->构造代码执行->构造方法执行初始化
5.一般的执行循序是:静态代码块->默认初始化->显示初始化->构造代码块执行->构造方法执行初始化
|