Class and ClassLoader in Java
(以下摘自 Java API 中文文档)
关于 Class
Class 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象。
Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。
关于 ClassLoader
类加载器是负责加载类的对象。每个 Class 对象都包含一个对定义它的 ClassLoader 的引用。
数组类的 Class 对象不是由类加载器创建的,而是由 Java 运行时根据需要自动创建。数组类的类加载器由 Class.getClassLoader() 返回,该加载器与其元素类型的类加载器是相同的;如果该元素类型是基本类型,则该数组类没有类加载器。
loadClass 方法
protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException
使用指定的二进制名称来加载类。此方法的默认实现将按以下顺序搜索类:
- 调用
findLoadedClass(String)来检查是否已经加载类。 - 在父类加载器上调用
loadClass方法。如果父类加载器为 null,则使用虚拟机的内置类加载器。 - 调用
findClass(String)方法查找类。
如果使用上述步骤找到类,并且 resolve 标志为真,则此方法将在得到的 Class 对象上调用 resolveClass(Class) 方法。
鼓励用 ClassLoader 的子类重写 findClass(String),而不是使用此方法。
findClass 方法
protected Class<?> findClass(String name) throws ClassNotFoundException
使用指定的二进制名称查找类。此方法应该被类加载器的实现重写。此方法将被 loadClass 方法调用。默认实现抛出一个 ClassNotFoundException。
defineClass 方法
protected final Class<?> defineClass(String name, byte[] b, int off, int len) throws ClassFormatError
将一个 byte 数组转换为 Class 类的实例。必须分析 Class,然后才能使用它。
Categorized in: Java · Tagged with: Java


(