Java的动态特性有两种,一是隐式的;另一种是显示的。隱式的(implicit)方法就是當程式設計師用到new 這個Java 關鍵字時,會讓類別載入器依需求載入您所需要的類別,這種方式使用了隱式的(implicit)方法。顯式的方法,又分成兩種方式,一種是藉由java.lang.Class 裡的forName()方法,另一種則是藉由java.lang.ClassLoader 裡的loadClass()方法。您可以任意選用其中一種方法。 阅读全文>
发表于 @ 2005年07月03日 00:18:00|评论(loading...)|收藏
下面一些参考资料可以帮助您理解 ClassLoaders:
阅读 Sun 网站上的在线文档。
Java Developer Connection 有一个定制 ClassLoader 教程。
学习 Java 语言规范中的类文件装入。
Java 虚拟机规范包含了 ClassLoaders 的信息。
JDK 版本 1.3 文档有使用 ClassLoader 的 核心 Java 库类的列表。
Luke Gorrie 撰写的 Echidna 是一段依靠定制 ClassLoader、非常有用的软件示例。
“创建 Java 1.2 样式的定制 ClassLoader”(JavaWorld,2000 年 3 月)提出了一些关于在 JDK 1.2 下构建 ClassLoader 的观点。
“从 XML 数据生成类”(developerworks,2000 年 8 月)描述了使用定制 ClassLoader 来实时创建新类。
如果您是 Java 平台的新手,Java 语言基础(developerworks,2000 年 11 月)提供了关于该平台一些基阅读全文>
发表于 @ 2005年07月01日 14:34:00|评论(loading...)|收藏
ClassLoader 是一个抽象类。为了扩充 Java 虚拟机动态装载类的方法,应用程序可实现 ClassLoader 的继承类。
通常,Java 虚拟机以与平台有关的方式,从局部文件系统中装载类。例如,在 UNIX 系统,虚拟机从 CLASSPATH 环境变量中定义的路径中装载类。
但是,某些类可能不是来自文件,而是来自其它资源,诸如网络,或者它们可能是由应用程序创建的。 defineClass 方法将一字节数组转换为 Class 类的实例。采用 Class 类中的 newInstance 方法创建新定义的类的实例。
类装载器创建的方法和构造子可以引用其它类。为确定引用类,Java 虚拟机调用初始创建该类的类装载器的 loadClass 方法。如果 Java 虚拟机仅需确定此类是否存在,和如果存在则如何获知它的父类,那么将 resolve 标记设为 false。但是,如果该类的实例已创建,或它的方法已被调用,则必须解析该类。这种情况,resolve 标记设为 true,调用 resolveClass 方法
........................阅读全文>
发表于 @ 2005年07月01日 11:16:00|评论(loading...)|收藏
今天在完成一个功能的时候,使用了ServiceLocate模式,
通过这个模式,在程序中可以自由的加载其他成员实现的功能模块
具体的做法:
1)定义标准的服务接口。
2)定义描述实现服务接口的xml文件。
3)程序读取该xml文件,使用Class.newInstance()实例化具体的服务对象。
4)建立一个特定服务和特定服务实现的对应的HashMap对象。完成注册任务。
5)主程序中根据具体的服务从HashMap中取得具体的对象进行服务。
................................阅读全文>
发表于 @ 2005年07月01日 11:14:00|评论(loading...)|收藏
Java本身是一种设计的非常简单,非常精巧的语言,所以Java背后的原理也很简单,归结起来就是两点:
1、JVM的内存管理
理解了这一点,所有和对象相关的问题统统都能解决
2、JVM Class Loader
理解了这一点,所有和Java相关的配置问题,包括各种App Server的配置,应用的发布问题统统都能解决
.................阅读全文>
发表于 @ 2005年07月01日 11:11:00|评论(loading...)|收藏
在流行的商业化编程语言中,Java 语言由于在 Java 虚拟机 (JVM) 上运行而显得与众不同。这意味着已编译的程序是一种特殊的、独立于平台的格式,并非依赖于它们所运行的机器。在很大程度上,这种格式不同于传统的可执行程序格式.....................阅读全文>
发表于 @ 2005年07月01日 11:08:00|评论(loading...)|收藏
ClassLoader,顾名思义是用来Load Class的,即加载Java类。ClassLoader读入一个字节数组,并且经过处理返回一个JVM内部可以识别的Class实例。Java虚拟机使用一套复杂但有效的方式来进行这一个至关重要的过程处理,并且提供了许多灵活的方式供人们扩展这套机制。 包括内容:为什么要使用自定义ClassLoader/ClassLoader内部结构/ClassLoader的补充说明阅读全文>
发表于 @ 2005年07月01日 11:07:00|评论(loading...)|收藏
1:BootStrapClassLoader :加载java运行过程中的核心类库JRE\lib\rt.jar, sunrsasign.jar, charsets.jar, jce.jar, jsse.jar, plugin.jar 以及存放在JRE\classes里的类
2:ExtClassLoader :加载JRE\lib\ext 或者目录下的库文件目录下的类(包括任何子目录,有别于其他两个ClassLoader)
3:AppClassLoader :加载CLASSPATH变量指定路径下的类
......................阅读全文>
发表于 @ 2005年07月01日 11:04:00|评论(loading...)|收藏
Java中类的查找与装载出现的问题总是会时不时出现在Java程序员面前,这并不是什么丢脸的事情,相信没有一个Java程序员没遇到过ClassNotException,因此不要为被人瞅见自己也犯这样的错误而觉得不自然,但是在如果出现了ClassNotFoundException后异常后一脸的茫然,那我想你该了解一下java的类装载的体制了,同时为了进行下面的关于类装载器之间的隔离性的讨论,我们先简单介绍一下类装载的体系结构。阅读全文>
发表于 @ 2005年07月01日 08:25:00|评论(loading...)|收藏