黑马程序员-JAVA基础加强之类加载器

来源:互联网 发布:asp网站模板源码 编辑:程序博客网 时间:2024/05/16 05:12

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

一、Java Virtual Machine有三种类加载器

1)启动类加载器启动加载器是用本地代码实现的类装入器,它负责将<Java_Runtime_Home>/lib下面的类库加载到内存中,但是不会加载<Java_Runtime_Home>/lib存在的陌生类,开发者通过将要加载的非JDK自身的类放置到此目录下期待启动类加载器加载是不可能的。

2)标准扩展类加载器:扩展类加载器是由Sun的ExtClassLoader实现的。它负责将<Java_Runtime_Home>/lib/ext或者由系统变量java.ext.dir指定位置中的类库加载到内存中。

3)系统类加载器:系统类加载器是由Sun的AppClassLoader(sun.misc.Launcher$AppClassLoader)实现的。AppClassLoader是加载Classpath中配置的类库。

 

二、类加载双亲委派机制

Java Virtual Machine在加载类时默认采用的是双亲委派机制。通俗的讲,就是某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。

加载器的加载顺序:

BootstrapClassLoader(张孝祥老师称其爷爷类)

ExtensionClassLoader(张孝祥老师称其爸爸类)

AppClassLoader

自定义的类加载器

怎么知道当前类使用了什么类加载器呢?

System.out.println(this.getClass().getClassLoader();//得到当前的类加载器

System.out.println(this.getClass().getClassLoader().getParent());//得到当前类的父加载器

System.out.println(this.getClass().getClassLoader().getParent().getParent());//得到当前类的父加载器的父加载器

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

 

原创粉丝点击