说一下类的加载过程

Java 类的加载过程可以分为以下三个步骤:

(1)加载阶段(Loading)

在加载阶段,Java 虚拟机通过类的全限定名获取该类的二进制字节流,并将其存储到方法区中。在获取字节流的过程中,Java 虚拟机会通过一系列的类加载器来加载类,包括以下几种方式:
- Bootstrap ClassLoader:负责加载 JDK 的核心类库,如 java.lang 包下的类。
- Extension ClassLoader:负责加载 JDK 扩展目录中的类。
- System ClassLoader:负责加载应用程序类路径(classpath)中的类。

(2)链接阶段(Linking)

在链接阶段,Java 虚拟机对已经加载的类进行验证、准备和解析三个步骤。
- 验证:Java 虚拟机会对字节码文件的格式、语法等进行验证,校验其是否符合规范;
- 准备:Java 虚拟机会为类变量分配内存,并设置默认的初始值;
- 解析:Java 虚拟机会将常量池中的符号引用替换成直接引用,并将类、字段、或方法的名称解析为 Java 虚拟机内部的引用。

(3)初始化阶段(Initialization)

在初始化阶段,Java 虚拟机会为类的静态变量赋予程序员指定的初值,执行类的静态代码块并调用类的静态方法。在 Java 中,静态变量初始化和静态代码块是按照声明顺序执行的。
需要注意的是,除了使用 new 关键字创建实例对象时,才会在初始化阶段进行类的初始化操作。另外,如果一个类在初始化过程中存在循环依赖,则会导致类初始化失败并抛出异常。
更新 2025年5月6日