温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java Class类如何加载

发布时间:2026-10-24 03:48:07 来源:亿速云 阅读:97 作者:小樊 栏目:编程语言

在 Java 中,**Class 类的加载(类加载)**是指 JVM 把 .class 文件中的二进制数据读入内存,并转换成 java.lang.Class 对象的过程。整个过程由 类加载器(ClassLoader) 完成,并遵循一定的生命周期。

下面从 整体流程、类加载阶段、类加载器、触发时机、双亲委派模型 几个方面说明。


一、类加载的整体过程

Java 类的加载分为 三大阶段:

  1. 加载(Loading)
  2. 链接(Linking)
  3. 初始化(Initialization)

二、类加载的具体阶段

1️⃣ 加载(Loading)

作用:

  • 通过类的全限定名(如 com.example.User)找到 .class 文件
  • 将字节码读入内存
  • 在方法区(或元空间)中创建对应的 Class 对象

由谁完成:

  • 类加载器(ClassLoader)
Class<?> clazz = Class.forName("com.example.User");

2️⃣ 链接(Linking)

链接又分为三步:

(1)验证(Verification)

  • 校验字节码是否合法
  • 防止非法或恶意 .class 文件

(2)准备(Preparation)

  • 为 静态变量 分配内存
  • 赋 默认初始值(不是代码中的值)
static int a = 10;
// 准备阶段:a = 0

(3)解析(Resolution)

  • 将 符号引用 转换为 直接引用
  • 比如方法、字段、类之间的引用

3️⃣ 初始化(Initialization)

真正执行 Java 代码

  • 执行 <clinit>() 方法
  • 静态变量赋值
  • 静态代码块执行
static int a = 10;
static {
    System.out.println("init");
}

✅ 只有 主动使用类 才会触发初始化


三、类加载器(ClassLoader)

Java 默认有三种类加载器:

类加载器 作用
Bootstrap ClassLoader 加载核心类(rt.jar)
Extension ClassLoader 加载扩展类
Application ClassLoader 加载用户类
ClassLoader cl = User.class.getClassLoader();

四、双亲委派模型(非常重要)

原则:

子加载器先委托父加载器加载,父加载不了再自己加载

流程:

AppClassLoader
   ↓ 委托
ExtClassLoader
   ↓ 委托
BootstrapClassLoader

好处:

  • 防止重复加载
  • 保证核心类安全(不能被篡改)

五、类什么时候会被加载?

✅ 主动使用(会初始化)

  • new 对象
  • 访问静态变量 / 静态方法
  • 反射(Class.forName)
  • 子类初始化
  • JVM 启动的主类

❌ 不会初始化

  • 仅声明引用
  • 访问 static final 常量(编译期常量)

六、常见类加载方式

1️⃣ 隐式加载

User u = new User();

2️⃣ 显式加载

Class.forName("com.example.User");

3️⃣ 自定义 ClassLoader

ClassLoader cl = new MyClassLoader();
Class<?> c = cl.loadClass("com.example.User");

七、简单总结

Java 中 Class 的加载,是由 ClassLoader 将 .class 文件读入内存,经历加载 → 链接 → 初始化,最终生成 Class 对象的过程。

如果你愿意,我也可以:

  • 画一张 类加载流程图
  • 讲 自定义 ClassLoader 实战
  • 对比 Java 8 和 Java 17 类加载差异

你想深入哪一块?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手