记录下Java中的<init> <cinit>方法执行过程

我们都知道,Java从源文件编译成字节码文件时,会生成一个<init>方法和一个<cinit>方法,但是我们知道他们具体的区别是什么吗?

Java的<init> <cinit>与类的初始化顺序

Java在编译之后会在字节码文件中生成<init>方法,称之为实例构造器,该实例构造器会将语句块,变量初始化,调用父类的构造器等操作收敛到<init>方法中,收敛顺序(这里只讨论非静态变量和语句块)为:
1. 父类变量初始化
2. 父类语句块
3. 父类构造函数
4. 子类变量初始化
5. 子类语句块
6. 子类构造函数
所谓收敛到<init>方法中的意思就是,将这些操作放入到<init>中去执行

Java在编译之后会在字节码文件中生成<cinit>方法,称之为类构造器,类构造器同实例构造器一样,也会将静态语句块,静态变量初始化,收敛到<cinit>方法中,收敛顺序为:
1. 父类静态变量初始化
2. 父类静态语句块
3. 子类静态变量初始化
4. 子类静态语句块

<cinit>方法是在类加载过程中执行的,而<init>是在对象实例化执行的,所以<cinit>一定比<init>先执行。所以整个顺序就是:
1. 父类静态变量初始化
2. 父类静态语句块
3. 子类静态变量初始化
4. 子类静态语句块
5. 父类变量初始化
6. 父类语句块
7. 父类构造函数
8. 子类变量初始化
9. 子类语句块
10. 子类构造函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值