基类和导入类的程序执行过程

 

该实验打印的结果如下所示:

 

ee

dd

gg

cc

ff

bb

结论,程序的执行顺序是这样的:

1、导入demo1类文件,执行main方法;

2、检查到类变量bb d1;

3、加载bb类的基类cc,并初始化cc类的static域;(这时候打印出了ee)

4、加载bb类,并初始化bb类的static域;(这时候打印出了dd)

5、执行了new bb();(创建了bb对象)

6、为基类cc的成员变量开辟内存并初始化;(这时候打印出了gg)

7、执行基类cc的构造函数;(这时候打印出了cc)

8、为bb的成员变量开辟内存并初始化;(这时候打印出了ff)

9、执行bb类的构造函数;(这时候打印出了bb)

 

 

 

根据第四版的《Think in Java》,第八章的“多态”第163页的实验总结:

基类和导出类的执行顺序;

(1)类加载,如果有基类,先加载基类;

(2)执行基类的static域,然后执行导出类的static域;

如果有new calss“导出类”();

(3)开辟导出类对象的内存空间,并对内存清零;开辟基类的对象内存空间,并对内存清零;(为什么是先导出类开辟内存,这里请参考P131,因为基类对象其实是导出类对象的第一个成员变量,而且是private的)

(4)初始化基类的成员变量,然后执行基类的构造函数;(如果此时调用了被导出类重写覆盖了的方法,那么会发送多态效应)

(5)初始化导出类的成员变量,然后执行导出类的构造函数;

posted on 2016-10-26 15:09 卧似长剑 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/chencanjian/p/6000457.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值