类的加载顺序

本文通过创建Animal和Person类,深入探讨了类在创建时的加载顺序及成员初始化流程,解析了父类与子类在加载过程中的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了探讨类在创建时,类成员的加载顺序,创建两个类:Animal类和Person类,其中Person 类继承Animal 类。Person类中重写了Animal类中的大部分方法。

                注意,但我们在程序块中调用eat方法时,父类中调用的是eat方法,而子类却重新定义了一个Peat方法。这是因为如果在子类中重写eat后,父类中程序块中的this.eat就只能调用到子类中的eat方法,而无法调用自己本身的eat方法。具体原因见类的加载机制:https://blog.csdn.net/monologuezjp/article/details/98846720

 

 

建立一个测试类,用来创建上述两个类的对象。

执行的结果如下:

从代码的执行结果来看,可以清晰的看出类的加载顺序:

1、加载父类
2、父类产生自己的静态空间   加载顺序:属性-->方法--> 块--> 执行
          执行输出静态块中的代码
3、加载子类
4、子类产生自己的静态空间
          执行静态块中的代码
------------------------------------------
5、开辟对象空间                                        产生对象前先加载静态属性、方法、块(从这里可以理解为什么静态元素不能调用非静态元素,以及为什么静态元素只能用类名.元素名的方式调用了。)
6、加载父类的非静态成员  属性 方法 块 构造方法
7、 执行块的代码,执行构造方法
8、加载子类的非静态成员
9、执行子类的块、构造方法
10、将对象空间的地址引用交给 变量来存储

用图的形式展示这个过程:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值