类的初始化

一个类的整个生命周期包括:加载,验证,准备,解析,初始化,使用,卸载

初始化

  1. 运行过程中遇到如下字节码指令时,如果类尚未初始化,那就要进行初始化:new、getstatic、putstatic、invokestatic等。这四个指定对应的Java代码场景是:
    new: 通过new创建对象;
    getstatic,putstatic: 读取、设置一个类的静态成员变量(不包括final修饰的静态变量);
    invokestatic: 调用一个类的静态方法;
  2. 调用一个类的静态变量
  3. 对类进行reflect反射调用,如果还没初始化则进行初始化
  4. 如果父类还没初始化,则初始化其父类
  5. 虚拟机启动时,会先初始化main主类

主动引用和被动引用

直接满足上述条件才会初始化,被称为主动引用。
间接满足上述情况不会初始化,被称为被动引用。

  1. 子类引用父类静态字段
  2. 子类引用父类静态方法
  3. 定义类的数组
  4. 调用类的常量 public static final
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值