类初始化触发条件

类的加载过程可粗略分为三个阶段:加载 -> 链接 -> 初始化

初始化阶段可被8种情况触发:

  1. 使用 new 关键字实例化对象的时候
  2. 读取或设置一个类型的静态字段(常量除外)
  3. 调用一个类型的静态方法
  4. 使用反射调用类的时候
  5. 当初始化类的时候,如果发现父类还没有进行过初始化,则先触发其父类初始化
  6. 虚拟机启动时,会先初始化主类(包含main()方法的那个类)
  7. 当初次调用 MethodHandle 实例时,初始化该 MethodHandle 指向的方法所在的类。
  8. 如果接口中定义了默认方法(default 修饰的接口方法),该接口的实现类发生了初始化,则该接口要在其之前被初始化

其中的2,3条目是被static代码触发的。其实初始化阶段就是执行类构造器方法的过程,这个方法是编译器自动生成的,里面收集了static修饰的所有类变量的赋值动作和静态语句块(static{} 块),并且保留这些代码出现的先后顺序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值