background image

了解 JAVA classloader(1)

与 C 或 C++编写的程序不同,Java 程序并不是一个可执行文件,而是

 

由许 多独立的类文件组成,每一个文件对应于一个 Java 类 。
ClassLoader 是 JVM 中将类装入内存的那部分。而且,Java 
ClassLoader 就是用 Java 语言编写的。这意味着创建您自己的
ClassLoader 非常容易,不必了解 JVM 的微小细节。

与 C 或 C++编写的程序不同,Java 程序并不是一个可执行文件,而是
由许多独立的类文件组成,每一个文件对应于一个 Java 类。

此外,这些类文件并非立即全部都装入内存,而是根据程序需要装入
内存。ClassLoader

是 JVM 中将类装入内存的那部分(无论是通过网络,

还是别的方法找到类文件,然后装入内存)

而且,Java ClassLoader 就是用 Java 语言编写的。这意味着创建您自
己的 ClassLoader 非常容易,不必了解 JVM 的微小细节。

为什么编写 ClassLoader?

如果 JVM 已经有一个 ClassLoader,那么为什么还要编写另一个呢?
问得好。缺省的 ClassLoader 只知道如何从本地文件系统装入类文件。
不过这只适合于常规情况,即已全部编译完 Java 程序,并且计算机处
于等待状态。

但 Java 语言最具新意的事就是 JVM 可以非常容易地从那些非本地硬盘
或从网络上获取类。例如,浏览者可以使用定制的 ClassLoader 从
Web 站点装入可执行内容。

有许多其它方式可以获取类文件。除了简单地从本地或网络装入文件以
外,可以使用定制的 ClassLoader 完成以下任务:

◆在执行非置信代码之前,自动验证数字签名;
◆使用用户提供的密码透明地解密代码;
◆动态地创建符合用户特定需要的定制化构建类;
◆任何您认为可以生成 Java 字节码的内容都可以集成到应用程序中。

定制 ClassLoader 示例

如果使用过 JDK 或任何基于 Java 浏览器中的 Applet 查看器,那么您
差不多肯定使用过定制的 ClassLoader。

Sun 最初发布 Java 语言时,其中最令人兴奋的一件事是观看这项新技
术是如何执行在运行时从远程的 Web 服务器装入的代码。(此外,还