






















类加载机制(Class Loading Mechanism) 是 JVM 把
.class文件中的字节码加载到内存、并在运行时动态链接、初始化为可用的 Java 类的过程。
Java 的类加载是 动态的,即在程序运行过程中按需加载类。
Java 类从被加载到可用,共经过以下 5 个阶段:
| 阶段 | 说明 | 关键点 |
|---|---|---|
⚠️ 面试高频问:
Q:类加载的哪个阶段会执行静态代码块?
✅ A:初始化阶段。
Java 使用双亲委派机制来加载类,主要的类加载器有:
| 类加载器 | 说明 | 加载的类 |
|---|---|---|
机制定义:
当一个类加载器加载类时,会先请求父加载器尝试加载,父加载器无法加载时,才由当前加载器自己加载。
好处:
避免重复加载;
保证核心类(如 java.lang.Object)只被 Bootstrap 加载;
提高系统安全性。
工作流程:
代码示例:
有时为了支持框架或插件的动态加载,需要打破双亲委派机制。
典型场景:
Tomcat、JNDI、OSGi、SPI机制、热部署等;
不同应用模块需要加载不同版本的同名类。
实现方式:
重写 loadClass() 方法,而不是只改 findClass();
让子加载器优先加载指定类(Parent First → Child First)。
JVM 只在 类的主动使用 时才会触发类加载与初始化。
主动使用包括:
new 实例化对象;
访问类的静态变量、调用静态方法;
反射调用;
初始化子类(父类先初始化);
JVM 启动时加载主类;
动态语言引用(MethodHandle、VarHandle)。
被动使用(不会触发加载):
访问 final static 编译期常量;
获取类的 Class 对象(如 A.class);
创建数组(A[] arr)。
| 面试问题 | 答题要点 |
|---|---|
输出:
说明 Class.forName() 会触发初始化,而 Demo.class 不会。
| 应用场景 | 使用点 |
|---|---|
加载验证准解析,初始化时才执行。
委派机制保安全,打破隔离框架现。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。