Java 类加载时机及初始化顺序

类加载时机(5 种)

虚拟机中以下 5 种情况会触发类的首次加载

  1. 遇到 newgetstaticsetstaticinvokestatic 字节码时
  2. 使用 java.lang.reflect 包的方法对类进行反射调用时
  3. 当加载一个类的时候,发现它的父类还未被加载,则先加载父类
  4. 虚拟机启动时,需要指定一个主类(带 main() 方法的类),虚拟机会先加载此类
  5. JDK 1.7 动态语言支持,java.lang.invoke.MethodHandle 实例最后的解析结果是 REF_getStaticREF_setStaticREF_invokeStatic 的方法句柄时,会加载对应的类

类初始化顺序

  1. 父类 <clinit> 块中的代码
  2. 子类 <clinit> 块中的代码
  3. 父类 <init> 块中的代码
  4. 子类 <init> 块中的代码

clinit 块 包含静态块与静态变量
init 块 包含成员变量与构造器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值