Class and ClassLoader in Java

(以下摘自 Java API 中文文档)

关于 Class

Class 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。基本的 Java 类型(booleanbytecharshortintlongfloatdouble)和关键字 void 也表示为 Class 对象。

Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。

关于 ClassLoader

类加载器是负责加载类的对象。每个 Class 对象都包含一个对定义它的 ClassLoader引用

数组类的 Class 对象不是由类加载器创建的,而是由 Java 运行时根据需要自动创建。数组类的类加载器由 Class.getClassLoader() 返回,该加载器与其元素类型的类加载器是相同的;如果该元素类型是基本类型,则该数组类没有类加载器。

loadClass 方法

protected Class<?> loadClass(String name,
                             boolean resolve)
                      throws ClassNotFoundException

使用指定的二进制名称来加载类。此方法的默认实现将按以下顺序搜索类:

  1. 调用 findLoadedClass(String) 来检查是否已经加载类。
  2. 在父类加载器上调用 loadClass 方法。如果父类加载器为 null,则使用虚拟机的内置类加载器。
  3. 调用 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,然后才能使用它。

By javafuns on November 12, 2009 at 21:58 · Views: 260 · Permalink · RSS
Categorized in: Java · Tagged with: 
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

Leave a Reply


  • Highest Rated

  • My PicasaPhotos

    IMG_0686.JPG

    facebook7.JPG

    d5d57d114341126dca80c4ea.jpg

  • RSS My del.icio.us

  • My RSS