java如何加载
Java 类加载机制
Java 类的加载是通过类加载器(ClassLoader)完成的。类加载器负责将类的字节码文件加载到 JVM 中,并生成对应的 Class 对象。
类加载的步骤
加载 查找并加载类的二进制数据(通常是 .class 文件),在内存中生成对应的 Class 对象。
验证 确保加载的类符合 JVM 规范,包括文件格式验证、元数据验证、字节码验证等。
准备 为类的静态变量分配内存并设置初始值(零值),例如 int 初始化为 0。
解析 将符号引用转换为直接引用,即将类、方法、字段的符号名称解析为具体的内存地址。
初始化 执行类的静态初始化代码(static 块)和静态变量的赋值操作。
类加载器层次结构
Bootstrap ClassLoader 加载 Java 核心类库(如 rt.jar),由 JVM 实现,不是 Java 类。
Extension ClassLoader 加载 Java 扩展库(如 ext 目录下的 jar 包)。
Application ClassLoader 加载应用程序类路径(classpath)下的类。
自定义 ClassLoader 开发者可以继承 ClassLoader 实现自定义加载逻辑。
双亲委派模型
类加载器在加载类时会先委托父加载器尝试加载,只有在父加载器无法加载时才会自己尝试加载。这种机制保证了类的唯一性和安全性。

自定义类加载示例
public class MyClassLoader extends ClassLoader {
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
byte[] classData = loadClassData(name);
return defineClass(name, classData, 0, classData.length);
}
private byte[] loadClassData(String className) {
// 从自定义位置读取类文件字节码
}
}
动态加载类
ClassLoader loader = new MyClassLoader();
Class<?> clazz = loader.loadClass("com.example.MyClass");
Object instance = clazz.newInstance();
常见应用场景
热部署:通过自定义类加载器实现不重启应用更新代码 插件系统:动态加载外部插件模块 类隔离:不同类加载器加载的类相互隔离






