知识大全 ClassLoader介绍

Posted 机制

篇首语:有了坚定的意志,就等于给双脚添了一对翅膀。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ClassLoader介绍相关的知识,希望对你有一定的参考价值。

ClassLoader介绍  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  JVM在运行时会产生三个ClassLoader Bootstrap ClassLoader Extension ClassLoader和AppClassLoader 其中 Bootstrap是用C++编写的 我们在Java中看不到它 是null 它用来加载核心类库 在JVM源代码中这样写道   static const char classpathFormat[] =   %/lib/rt jar:    %/lib/i n jar:    %/lib/sunrsasign jar:    %/lib/jsse jar:    %/lib/jce jar:    %/lib/charsets jar:    %/classes ;  知道为什么不需要在classpath中加载这些类了吧?人家在JVM启动的时候就自动加载了 并且在运行过程中根本不能修改Bootstrap加载路径   Extension ClassLoader用来加载扩展类 即/lib/ext中的类   最后AppClassLoader才是加载Classpath的   ClassLoader加载类用的是委托模型 即先让Parent类(而不是Super 不是继承关系)寻找 Parent找不到才自己找 看来ClassLoader还是蛮孝顺的 三者的关系为:AppClassLoader的Parent是ExtClassLoader 而ExtClassLoader的Parent为Bootstrap ClassLoader 加载一个类时 首先BootStrap先进行寻找 找不到再由ExtClassLoader寻找 最后才是AppClassLoader   为什么要设计的这么复杂呢?其中一个重要原因就是安全性 比如在Applet中 如果编写了一个java lang String类并具有破坏性 假如不采用这种委托机制 就会将这个具有破坏性的String加载到了用户机器上 导致破坏用户安全 但采用这种委托机制则不会出现这种情况 因为要加载java lang String类时 系统最终会由Bootstrap进行加载 这个具有破坏性的String永远没有机会加载   我们来看这段代码   [code]//A java  public class A  public static void main(String[] args)  A a=new A();  System out println(System getProperty( java ext dirs ));  System out println(a getClass() getClassLoader());  B b=new B();  b print();      //B java  public class B  public void print()  System out println(this getClass() getClassLoader());    [/code]     我们将它放在Classpath中 则打印出  sun misc Launcher$AppClassLoader@ e c  sun misc Launcher$AppClassLoader@ e c  可见都是由AppClassLoader来加载的    我们将其放在%jre%/lib/ext/classes(即ExtClassLoader的加载目录 其加载/lib/ext中的jar文件或者子目录classes中的class文件)中 则会打印出   sun misc Launcher$ExtClassLoader  sun misc Launcher$ExtClassLoader   我们将A class放到%jre%/lib/ext/classes中 而将B class放到classpaht中又会怎么样呢?结果是   sun misc Launcher$ExtClassLoader  Exception in thread main java lang NoClassDefFoundError:B  at A main(A java: )    怎么会这样呢?这其中有一个重要的问题 A类当然是由ExtClassLoader来加载的 B类要由哪个加载呢?B类要由调用它自己的类的类加载器(真拗口) 也就是说 A调用了B 所以B由A的类加载器ExtClassLoader来加载 ExtClassLoader根据委托机制 先拜托Bootstrap加载 Bootstrap没有找到 然后它再自己寻找B类 还是没找到 所以抛出异常 ExtClassLoader不会请求AppClassLoader来加载!你可能会想 这算什么问题 我把两个类放到一起不就行了?    呵呵 没这么简单 比如JDBC是核心类库 而各个数据库的JDBC驱动则是扩展类库或在classpath中定义的 所以JDBC由Bootstrap ClassLoader加载 而驱动要由AppClassLoader加载 等等 问题来了 Bootstrap不会请求AppClassLoader加载类啊 那么 他们怎么实现的呢?我就涉及到一个Context ClassLoader的问题 调用Thread getContextClassLoader cha138/Article/program/Java/JSP/201311/19529

相关参考

知识大全 一个简单的自定义ClassLoader的实现

一个简单的自定义ClassLoader的实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  很多

知识大全 面试自我介绍

在面试时,我们经常会被要求自我介绍,所谓自我介绍,就是把自已介绍给出别人,以使别人认识自已,所以恰到好处的自我介绍,可以大大提高面试的好感。1.了解自我介绍的分类自我介绍根据介绍人的不同,可以分为主动

知识大全 有人在武清么,介绍介绍工作

有人在武清么,介绍介绍工作工作这里是没有的你要去求职网站去投递简历的你也可以去你附近的劳务公司去看看机会的有什么港剧好看?介绍介绍使徒行者,忠奸人,溏心风暴,我的如意狼君,九五至尊,溏心风暴之家好月圆

知识大全 求职面试怎样做好自我介绍?

求职面试自我介绍攻略在面试时,我们经常会被要求自我介绍,所谓自我介绍,就是把自已介绍给出别人,以使别人认识自已,所以恰到好处的自我介绍,可以大大提高面试的好感。1.了解自我介绍的分类自我介绍根据介绍人

知识大全 自我介绍必要礼仪

介绍的顺序,位低者先。这一点最重要,就是谁先介绍,该介绍时你不介绍有时候挺麻烦。根据公关礼仪的惯例,地位低者先介绍。比如,主人要先向客人把自己介绍一下;公关人员要把自己向贵宾作一个介绍;男士要把自己向

知识大全 自我介绍的礼仪

介绍的顺序,位低者先。这一点最重要,就是谁先介绍,该介绍时你不介绍有时候挺麻烦。根据公关礼仪的惯例,地位低者先介绍。比如,主人要先向客人把自己介绍一下;公关人员要把自己向贵宾作一个介绍;男士要把自己向

知识大全 自我介绍—收放自如的面试自我介绍技巧

在找工作面试时,我们首先是会被要求先做自我介绍,看似比较简单,就是把自已介绍给出别人,以使别人认识自已,所以恰到好处的自我介绍,可以大大提高面试的好感。那么求职面试自我介绍技巧就显得尤为重要了。要做好

犀鸟亚科的总体介绍、分类介绍

总体介绍包括12属55种。弯嘴犀鸟属Tockus分布于非洲,有14种:白冠弯嘴犀鸟Tockusalbocristatus、黑弯嘴犀鸟Tockushartlaubi、红弯嘴犀鸟Tockuscamurus

知识大全 求职面试自我介绍实用攻略

在面试时,我们经常会被要求自我介绍,所谓自我介绍,就是把自已介绍给出别人,以使别人认识自已,所以恰到好处的自我介绍,可以大大提高面试的好感。1.了解自我介绍的分类自我介绍根据介绍人的不同,可以分为主动

知识大全 自我介绍—招聘会上如何自我介绍

徐州才好网建议你最多用二十秒钟介绍自己的姓名、学校、专业。然后话锋一转,引出自己的优势或强项。这一求职面试自我介绍有何技巧呢?试想,如果介绍得时间长的话,人家都会嫌弃你繁琐了。那么把握好时间,一定要在