java类加载器及其委托机制

java类加载器及其委托机制

ID:44208577

大小:39.50 KB

页数:4页

时间:2019-10-19

java类加载器及其委托机制_第1页
java类加载器及其委托机制_第2页
java类加载器及其委托机制_第3页
java类加载器及其委托机制_第4页
资源描述:

《java类加载器及其委托机制》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Java类加载器及其委托机制Java虚拟机中可以安装多个类加载器,系统默认主要三个类加载器,每个类负责加载特定位置的类:BootStrap(内嵌在java虚拟机中由C++编写),ExtClassLoader,AppClassLoadero当然也可以口定义类加载器,口定义的加载器必须继承ClassLoadero类加载器也是Java类,因为其它Java类的类加载器本身也要被类加载器加载,显然必须有第一个类加载器不是java类,这个就是BootStrapoBootstrap它是嵌套在Java虚拟机内核中的,jvm启动,这个类就会启动,它是由C++语言编写的。

2、Java虚拟机中的所有类加载器采用具有父子关系的树形结构进行组织,在实例化每个类加载器对彖时,需要为其指定一个父级类加载器对彖或者默认采用系统类加载器为其父级类加载。下而我们来看如下一段代码:publicclassClassLoaderTest{publicstaticvoidmain(String[]args){ClassLoaderloader=ClassLoaderTest.class・getClassLoader();while(loader!=null){System.out.println(loader.getClass()・getName

3、());loader=loader・getparent();}System.out.println(loader);//sun.misc.Launcher$AppClassLoader//sun.misc.Launcher$ExtClassLoader//null:注null就代表是Bootstrap类加载器,该加载器是顶级加载器,没有父类加载器类加载器之间的父子关系和管辖范围:Bootstrap・>ExtClassLoader・>AppClassLoader(即通常所说的SystemClassLoader)它们的管辖范围依次是:Bootstrap>J

4、RE/lib/rt.jarExtClassLoader>JRE/lib/ext/*.jarAppClassLoader>CLASSpATH指定的所有jar或目录。下面我们来测试一下这个管辖范围是否如同上述所示:publicclassClassLoaderTest{publicstaticvoidmain(String[]args){System.out.println(ClassLoaderTest.class.getClassLoader().getClass().getName());}//输出为:sun.misc.Launcher$AppClas

5、sLoader下血我们选屮ClassLoaderTest文件,右键属性,看下这个类的java环境是否是jdk的安装目录(注意:不是MyclipseH带的JRE0录),确认后,再右键选中该文件,右键导出为jar文件,这吋,选中jar件的存放位置在..JRE/lib/ext下,比如我的冃录(C:\programFilesWJavaWjdk1.5.0\jre\lib\ext\test.jar),test.jar是我自定义一个文件名,后再运行上述main方法,此时它的输出就是:sun.misc.Launcher$ExtClassLoader此时的环境

6、状态是classpathbl录下有ClassLoaderTest.class,ext/test.jar包屮也有ClassLoaderTest.class,为什么它不先加载classpath下的类文件呢?这就需要了解类加载器的具体过程和原理。类加载器的委托机制:当Java虚拟机要加载一个类时,到底该派哪个类加载器去加载呢?1.首先是当前线程的类加载器去加载线程中的第一个类。2.如果类A中引用了类B,Java虚拟机将使用加载类A的类加载器来加载类Bo3.还可以直接调用ClassLoader.loadClass()方法来指定某个类加载器去加载某个类。每个类加

7、载器加载类时,又先委托给其上级类加载器。1.当所有祖宗类加载器没有加载到类,回到发起者类加载器,还加载不了,则抛出ClassNotFoundException,不是再去找发起者类加载器的儿子,因为没有getChlid方法,即使有,那么有多个儿子,找哪一个呢?有一道面试题:能不能自己写个类叫java.lang.System?—般情况下不能,因为类加载采用委托机制,这样可以保证爸爸们优先,也就是总是使用爸爸们能找到的类,这样总是使用java系统提供的System。因为“每个类加载器加载类吋,乂先委托给其上级类加载器”,java.lang.System在Bo

8、otstrap中最先加载。但是我们,J以丐一个类加载器来加载我们口己丐的java.lang.S

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。