IT源码网

类的初始化

luoye 2021年04月03日 程序员 434 0

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

初始化

  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
评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!