仓酷云

标题: 来看在Java顶用类装载框架把持类加载 [打印本页]

作者: 因胸联盟    时间: 2015-1-18 11:23
标题: 来看在Java顶用类装载框架把持类加载
先谈谈我对java的一些认识。我选择java,是因为他语法简单,功能强大,从web,到桌面,到嵌入式,无所不能。但当我进一步了解了java后,感叹,java原来也有许多缺点。
择要经由过程构建一个可以把Java类装载断绝到一个指定的jar文件中的类装载组件容器框架,你能够确保运转时候会装载你希冀的组件版本。
Java的类装载框架强无力且具有天真性。它同意使用程序存取类库而不用链接到静态的"include"文件。代之的是,它可以从指定地位装载包括库类和资本的档案文件,比方由CLASSPATH情况变量所界说的目次和收集地位。由体系来静态地剖析对类和资本的运转时候参考,从而简化了更新和版本刊行。但是,每个库都有其本人的依附性汇合-而且由开辟者和公布职员来包管他们的使用程序得当地参考准确的版本。遗憾的是,默许的类装载体系和特定依附性的分离大概而且的确会招致毛病、体系溃散乃至于更糟的情形产生。
本文中,我将向你倡议一个完成类装载的容器框架,从而办理这些成绩。
1、JavaClasspath
Java依据情况属性/变量CLASSPATH来指定运转时候用来查找类和别的资本的路径。你能够经由过程设置CLASSPATH情况变量或利用Java命令行选项--classpath来界说CLASSPATH属性。
典范地,一个Java运转时候以上面按次查找和加载类:
1.在bootstrap类列表中的类-这些是表现Java平台的类,比方在rt.jar中的类。
2.呈现在扩大类列表中的类-这些类利用扩大机制框架来扩大Java平台,利用位于运转时候情况的/lib/ext目次下的档案文件(.jar,.zip,等等。)。
3.用户类-这些类不利用-classpath命令行选项或CLASSPATH情况变量标识的扩大机制架构。
2、档案与Classpath
一个档案.jar或.zip文件能够包含一个manifest文件-它们包括可以用于供应档案信息,设置档案属性,等等的出口。这个manifest文件还能够经由过程包含一个名为Class-Path的出口(它包括一个档案和目次列表)来扩大classpath。JDK1.3中引进了Class-Pathmanifest出口用于指定可选的据必要能够加载的jar文件和目次。上面是一个Class-Path出口的例子:
Class-Path:mystuff/utils.jar
mystuff/logging.jarmylib/
Java供应了一种可扩大模子用于指定装载类的地位和文件列表。但是,由此也激发了一些成绩,比方,一个分歧版本的库大概存在于classpath中-这超越一个实行类所希冀的了局。
3、Classpath版本抵触
在Java中,一个类的运转时候标识是由经由过程其完整限制名字来界说的(在类名之前的包名,偶然被作为FQN),一切这些都增加到装载类的相干装载器的ID。如许以来,由多个类加载器加载的一个类的每个实例都将被看成是Java运转时候的一个独自的实体。这意味着,运转时候可以在任什么时候间装载统一个类的多个版本。这是一种十分无力和相称天真的特性;但是,假如一名开辟职员不仔细地利用的话,某些反作用大概会令他迷惑不解。
能够假想,你在开辟一个企业使用程序-它利用相似语义从多种源存取数据,比方一个文件体系和一个数据库。很多这类范例的体系都表露一个数据存取层-经由过程笼统相似数据源的数据存取对象(DAO)。如今,假想你装载一个新版本的一个数据库DAO,利用一种稍微分歧的API来满意一个DAO客户真个新特性的请求-可是你仍旧必要新式的DAO以便合适于别的还没无为这类新的API筹办好的客户端。在典范的运转时候情况下,这类新的DAO将复杂地交换旧的版本而且一切的新实例都将重新版本中创立。但是,假如在一直止运转时候情况的条件下产生更新,那末任何已存在的旧DAO的实例将与该新DAO的任何实例一同驻留于内存中-当创立这些新实例时。这已足已使人困惑了。更加糟的是,一名DAO客户希冀创立一个旧版本的DAO的实例,可是实践上失掉一个具有已改动的API的新版本的实例。正如你所见,这大概会带来一些风趣的应战。
为了确保不乱性和平安性,挪用代码必需可以指明它想利用的类的准确版本。为此,你能够创立一个类加载器,组件容器模子而且利用一些复杂的类加载手艺。
<p>
C#是不行的,比如说美国的航天飞船里就有java开发的程序以上是我的愚见,其实不管那种语言,你学好了,都能找到好的工作,
作者: 活着的死人    时间: 2015-1-20 23:26
Java 编程语言的风格十分接近C、C++语言。
作者: 蒙在股里    时间: 2015-1-24 17:41
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
作者: 第二个灵魂    时间: 2015-2-2 13:03
是一种使用者不需花费很多时间学习的语言
作者: 愤怒的大鸟    时间: 2015-2-7 20:29
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
作者: 简单生活    时间: 2015-2-23 09:53
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
作者: 兰色精灵    时间: 2015-2-24 02:02
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
作者: admin    时间: 2015-3-7 10:28
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
作者: 只想知道    时间: 2015-3-9 21:24
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
作者: 飘灵儿    时间: 2015-3-17 01:10
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
作者: 小女巫    时间: 2015-3-23 11:29
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2