java如何加载类
加载类的基本原理
Java类加载是通过类加载器(ClassLoader)完成的,负责将.class文件加载到JVM内存中。类加载遵循双亲委派机制,确保类的唯一性和安全性。
类加载的三种方式
显式加载 通过ClassLoader的loadClass()方法直接加载类:
Class<?> clazz = ClassLoader.getSystemClassLoader().loadClass("com.example.MyClass");
Class.forName() 动态加载并初始化类(默认执行静态代码块):

Class<?> clazz = Class.forName("com.example.MyClass");
不初始化类可添加参数:
Class<?> clazz = Class.forName("com.example.MyClass", false, loader);
字面量引用 直接使用类字面量触发加载(不初始化):

Class<?> clazz = com.example.MyClass.class;
自定义类加载器
继承ClassLoader并重写findClass()方法可实现自定义加载逻辑:
public class CustomLoader extends ClassLoader {
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
byte[] bytes = loadClassData(name);
return defineClass(name, bytes, 0, bytes.length);
}
private byte[] loadClassData(String className) {
// 自定义加载字节码的逻辑
}
}
热加载实现
通过创建新的ClassLoader实例实现类重新加载:
ClassLoader parent = Thread.currentThread().getContextClassLoader();
CustomLoader loader = new CustomLoader(parent);
Class<?> clazz = loader.loadClass("com.example.DynamicClass");
注意事项
- 避免重复加载:双亲委派模型下,同一个类加载器对相同类名只会加载一次
- 资源释放:自定义类加载器加载的类,需在适当时机解除引用以便GC回收
- 权限控制:安全管理器可能限制某些类的加载操作






