[Java高并发编程详解]类的加载过程(未完待续...)

文章目录

    • 类的加载阶段
    • 各个阶段讲解
    • 类的主动使用和被动使用
      • 主动使用(6种情况会导致类的初始化)
        • 特殊情况

类的加载阶段

[Java高并发编程详解]类的加载过程(未完待续...)_第1张图片

各个阶段讲解

加载阶段:主要负责查找并加载class文件

连接阶段:
验证:确保class文件的正确性,比如版本,class的魔术因子

准备:为类的静态变量分配内存,并且为其初始化默认值

解析:把类中的符号引用转换为直接引用

初始化阶段: 为类的静态变量赋予正确的初始值(代码编写阶段给定的值)

类的主动使用和被动使用

JVM虚拟机规定,每个类或接口 首次主动使用 才会对其进行初始化

主动使用(6种情况会导致类的初始化)

  • 通过new关键字,会导致类的初始化
  • 访问类的静态变量
  • 访问类的静态方法
  • 对某个类的反射操作
  • 初始化子类会导致父类的初始化
  • 启动类(比如在执行main函数所在的类会导致该类的初始化)

特殊情况

  • 通过子类使用父类的静态变量只会导致父类的初始化
  • 引用类的静态变量不会导致类的初始化,但是一些特殊情况会导致类的初始化. 例如:
public final static int RANDOM = new Random().nextInt();

引用这个静态变量会导致类的初始化,因为RANDOM需要进行随机函数的计算.在类的加载和连接阶段都是不可以进行对其进行计算,所以需要初始化之后才能对其赋值.

你可能感兴趣的:(Java高并发编程)