不考虑继承,单纯的new C(),虚拟机会执行如下操作:
(1):将C.class文件加载到内存中。
(2):在堆内存中创建一个C类对象。
(3):把C类对象中的属性进行默认初始化。
(4):把C类对象中的属性进行显示初始化。
(5):调用构造代码块(如果没有,不执行这个操作)。
(6):调用构造函数进行初始化。
如果一个类继承了另一个类,那在该类的构造方法中如果不指定需要调用的父类的构造方法,系统会默认调用父类的无参构造方法。楼主提供的代码中:C继承B,B继承A。那么在new C()的时候,在调用构造方法的时候,会去调用B的构造,而B再去调用父类A的构造,按照这样的执行逻辑可知A会先初始化,然后是B,再者就是C。这个是个人理解,不妥之处,还请多指正。 |