类装载.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
类装载

类装载Java 类加载过程2011-06-02 20:04未经同意,严禁转载!这篇文章将比较深入的介绍java类加载原理和过程,虽然很多情况你都不需要了解类加载的过程,但是如果你希望了解java是如何工作的,或者希望定义自己的类加载器,就一定要了解类加载的过程,当然,无论你是否要参与类加载过程,了解这个过程对你都会有很大的帮助。本文希望通过一步一步的分析来说明类加载的过程,希望这种分析方法也会对你有某些帮助。本文使用的JDK是sun的jdk_1.4.2版本,当然这里重在阐述原理,和JDK本身没有多大的关系。?这篇文章试图解决下面一些问题:类加载原理引导类加载器,扩展类加载器和系统类加载器如果知道某个类是哪个类加载器加载的如果得到系统类加载器加载了那些类?首先我们要分析类加载原理,java中默认有三种类加载器:引导类加载器,扩展类加载器,系统类加载器(也叫应用类加载器)引导类加载器负责加载jdk中的系统类,这种类加载器都是用c语言实现的,在java程序中没有办法获得这个类加载器,对于java程序是一个概念而已,基本上不用考虑它的存在,像String,Integer这样的类都是由引导类加载器加载器的.扩展类加载器负责加载标准扩展类,一般使用java实现,这是一个真正的java类加载器,负责加载jre/lib/ext中的类,和普通的类加载器一样,其实这个类加载器对我们来说也不是很重要,我们可以通过java程序获得这个类加载器。系统类加载器,加载第一个应用类的加载器(其实这个定义并不准确,下面你将会看到),也就是执行java MainClass 时加载MainClass的加载器,这个加载器使用java实现,使用的很广泛,负责加载classpath中指定的类。?类加载器之间有一定的关系(父子关系),我们可以认为扩展类加载器的父加载器是引导类加载器(当然不这样认为也是可以的,因为引导类加载器表现在java中就是一个null),不过系统类加载器的父加载器一定是扩展类加载器,类加载器在加载类的时候会先给父加载器一个机会,只有父加载器无法加载时才会自己去加载。?我们无法获得引导类加载器,因为它是使用c实现的,而且使用引导类加载器加载的类通过getClassLoader方法返回的是null.所以无法直接操作引导类加载器,但是我们可以根据Class.getClassLoader方法是否为null判断这个类是不是引导类加载器加载的,可以通过下面的方法获得引导类加载器加载的类路径(每个jar包或者文件夹对应了一个URL); sun.misc.Launcher.getBootstrapClassPath().getURLs()你可以直接在你的main函数中输出就可以了 System.out.println(java.util.Arrays.asList(sun.misc.Launcher.getBootstrapClassPath().getURLs()).toString());得到的结果是:[file:/C:/Program%20Files/Java/j2re1.4.2_10/lib/rt.jar,file:/C:/Program%20Files/Java/j2re1.4.2_10/lib/i18n.jar,file:/C:/Program%20Files/Java/j2re1.4.2_10/lib/sunrsasign.jar,file:/C:/Program%20Files/Java/j2re1.4.2_10/lib/jsse.jar,file:/C:/Program%20Files/Java/j2re1.4.2_10/lib/jce.jar,file:/C:/Program%20Files/Java/j2re1.4.2_10/lib/charsets.jar,file:/C:/Program%20Files/Java/j2re1.4.2_10/classes]??其实我们是可以指定引导类加载器的类路径的,java提供了一个-Xbootclasspath参数,不过这个参数不是标准参数。java -Xbootclasspath: 运行时指定引导类加载器的加载路径(jar文件或者目录)java -Xbootclasspath/p:和上面的相同,不过把这个路径放到原来的路径前面 java -Xbootclasspath/a:这个就是在原引导类路径后面添加类路径。上面我们有提过加载第一个应用类未必就是系统加载器。如果我把这个应用类的路径放到引导类路径中,它将会被引导类加载器加载,大致这样 java -Xbootclasspath/a:myjar.jar MainClass 如果MainClass在myjar.jar中,那么这个类将会被引导类加载器加载。如

文档评论(0)

asd522513656 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档