频 道 直 达 - 新闻 - 读书 - 培训 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 技术圈 - 博客 - BBS
51CTO.COM_中国领先的IT技术网站
找资料:

了解JAVA classloader(1)

作者: 出处:赛迪网社区  (  ) 砖  (  ) 好  评论 ( ) 条  进入论坛
更新时间:2006-11-21 09:59
关 键 词:JAVA  classloader  
阅读提示:与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服务器装入的代码。(此外,还有更令人兴奋的事--Java技术提供了一种便于编写代码的强大语言。)更一些令人激动的是它可以执行从远程Web服务器通过HTTP连接发送过来的字节码。

此项功能归功于Java语言可以安装定制ClassLoader。Applet查看器包含一个ClassLoader,它不在本地文件系统中寻找类,而是访问远程服务器上的Web站点,经过HTTP装入原始的字节码文件,并把它们转换成JVM内的类。

浏览器和Applet查看器中的ClassLoaders还可以做其它事情:它们支持安全性以及使不同的Applet在不同的页面上运行而互不干扰。

LukeGorrie编写的Echidna是一个开放源码包,它可以使您在单个虚拟机上运行多个Java应用程序。它使用定制的ClassLoader,通过向每个应用程序提供该类文件的自身副本,以防止应用程序互相干扰。

我们的ClassLoader示例

了解了ClassLoader如何工作以及如何编写ClassLoader之后,我们将创建称作CompilingClassLoader(CCL)的Classloader。CCL为我们编译Java代码,而无需要我们干涉这个过程。它基本上就类似于直接构建到运行时系统中的“make”程序。

注:进一步了解之前,应注意在JDK版本1.2中已改进了ClassLoader系统的某些方面(即Java2平台)。本教程是按JDK版本1.0和1.1写的,但也可以在以后的版本中运行。

Java2中ClassLoader的变动描述了Java版本1.2中的变动,并提供了一些详细信息,以便修改ClassLoader来利用这些变动。

ClassLoader的基本目标是对类的请求提供服务。当JVM需要使用类时,它根据名称向ClassLoader请求这个类,然后ClassLoader试图返回一个表示这个类的Class对象。通过覆盖对应于这个过程不同阶段的方法,可以创建定制的ClassLoader。

在本文的其余部分,您会学习Java ClassLoader的关键方法。您将了解每一个方法的作用以及它是如何适合装入类文件这个过程的。您也会知道,创建自己的ClassLoader时,需要编写什么代码。

在下文中,您将会利用这些知识来使用我们的ClassLoader示例--CompilingClassLoader。

方法loadClass

ClassLoader.loadClass()是ClassLoader的入口点。其特征如下:

Class loadClass(String name, boolean resolve);

name参数指定了JVM需要的类的名称,该名称以包表示法表示,如Foo或java.lang.Object。

resolve参数告诉方法是否需要解析类。在准备执行类之前,应考虑类解析。并不总是需要解析。如果JVM只需要知道该类是否存在或找出该类的超类,那么就不需要解析。

在Java版本1.1和以前的版本中,loadClass方法是创建定制的ClassLoader时唯一需要覆盖的方法。(Java 2中ClassLoader的变动提供了关于Java 1.2中findClass()方法的信息。)


共3页: 1 [2] [3] 下一页
【内容导航】
发表
查看
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 领 先 的 IT 技 术 网 站 ·
技 术 成 就 梦 想
·Java基础教程 (查看52371次)
·UML类图详解 (查看46839次)
·Java编程开发手册 (查看25118次)
·UML统一建模语言 (查看24099次)
·C#技术开发指南 (查看22406次)
·Java编程开发手册 (1195个砖)
·Java基础教程 (429个砖)
·C#技术开发指南 (304个砖)
·PB开发教程 (220个砖)
·.NET开发手册 (217个砖)
·Java编程开发手册 (653个好)
·Java基础教程 (569个好)
·.NET开发手册 (251个好)
·PB开发教程 (209个好)
·Delphi开发技术手册 (174个好)
订阅技术快讯
电子杂志下载
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
名称:Vista精品应用黄皮书
简介:《Vista精品应用黄皮书》囊括了Vista的各方面内容。此次的精简版,是将里面的内容做了提取,便于用户下载和使用。内容包含了各种Vista的安装与实施、技巧与解析以及各种Vista相关学习文档和相关软件的安全下载。该电子书是了解和应用Vista人员必备的工具手册,并且也是第一本
名称:2006中国IT论坛精品集合
简介:本书由“51CTO论坛推广联盟”制作完成。书中所有内容均来自各联盟成员的论坛(网站)。制作本书的目的是为了集中大家的优势资源,将更多更精彩的内容带给广大技术爱好者。本书是联盟成立以来制作的第一本书。
关键字阅读
频道精选
主编信箱 热线:010-66476606 告诉我们您想看的:专题 文章
关于我们 | 诚聘英才 | 联系我们 | 网站大事 | 意见反馈 | 网站地图
Copyright©2005-2007 51CTO.COM 版权所有