欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-04 10:07:17
...

类的加载阶段

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

各个阶段讲解

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

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

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

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

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

类的主动使用和被动使用

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

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

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

特殊情况

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

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

相关标签: Java高并发编程