Java中Class.forName()与ClassLoader加载类的区别是什么?

摘要:要理解 Java 反射中 Class.forName() 和 ClassLoader 的区别,我们可以从核心作用、加载机制、初始化行为三个维度拆解,先通过通俗的定义建立认知,再结合代码示例和实际场景说明。 一、核心区别:加载 &#x
要理解 Java 反射中 Class.forName() 和 ClassLoader 的区别,我们可以从核心作用、加载机制、初始化行为三个维度拆解,先通过通俗的定义建立认知,再结合代码示例和实际场景说明。 一、核心区别:加载 + 初始化 vs 仅加载 1. 先明确基础概念 类加载过程:JVM 加载类分为 3 步:加载(Load)→链接(Link)→初始化(Initialize)。 加载:把类的字节码读入内存,生成 Class 对象; 初始化:执行类的静态代码块、初始化静态变量(<clinit> 方法)。 ClassLoader:仅负责加载阶段,不会触发类的初始化; Class.forName():默认触发加载 + 链接 + 初始化 全流程(可通过参数控制是否初始化)。
阅读全文