Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序

关于java中类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序虽然看过N多次,但是依然记不住,在这里按照自己的想法整理下:
首先,不管是子类还是父类,首先将代码块分成2部分,第一部分是静态成员变量和静态初始化块,我们暂且记作静态代码块A,另一部分是非静态成员变量和非静态初始化块以及构造函数,我们暂且记作非静态代码块B。
然后,每个代码块中的执行顺序是一定的,对于静态代码块A,首先执行的是静态成员变量的初始化,然后再执行静态初始化块;对于非静态初始化块B,首先执行的是非静态成员变量的初始化,然后是非静态初始化块,最后才执行构造函数:
A:静态成员—->静态初始化块;
B:非静态成员—->非静态初始化块—->构造函数。
最后,我们再将上面划分好的两块进行排序,第一,根据名字我们肯定知道,静态代码块肯定是在非静态代码块之前执行的,所以整体的顺序就是先A后B,内部顺序不变。继承中的调用顺序比较复杂,但是这样分开之后相对来说就比较容易记住了。第一次排序:静态的肯定在非静态的前面,第二次排序:父类的肯定在子类的前面。
比如:Son继承自Father,先将代码块分块,则有4部分代码,Son的静态代码块,Son的非静态代码块,Father的静态代码块,Father的非静态代码块。先根据静态排序:(Son静态代码块,Father静态代码块)—->(Son非静态代码块,Father非静态代码块),再根据父类子类排序:Father静态代码块—->Son静态代码块—->Father非静态代码块—->Son非静态代码块,最后再按每个代码块中的内部在顺序执行就是最终的执行顺序:

Father静态成员变量初始化
Father静态初始化块

Son静态成员变量初始化
Son静态初始化块

Father普通成员变量
Father普通初始化块
Father构造函数

Son普通成员变量
Son普通初始化块
Son构造函数

以上是我的理解,如果有错误的地方希望各位指正!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值