黑马程序员__类加载器
转载什么是类加载器
类加载器就是加载类的工具,我们在程序中用到一个类的时候,虚拟机通过类加载器将class文件加载加载到内存中在进行一系列的处理后变成字节码为我们使用。
Java中默认的类加载器
Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类负责加载特定位置的类:BootStrap,ExtClassLoader,AppClassLoader
类加载器也是java类,因为其他java类加载器本身也要被类加载器加载,显然必须有一个类加载器不是java类,这就是BootStrap。
代码示例:查看个各类的加载器
package cn.itcast.classloader;
/**
* 测试类加载器的类
* @author hezhudong
*
*/
publicclass ClassLoaderTest {
/**
* @param args
*/
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
//获取ClassLoaderTest类的加载器名称并打印
String classLoaderName = ClassLoaderTest.class.getClassLoader().getClass().getName();
System.out.println(classLoaderName);
//获取System类的加载器并打印
ClassLoader classLoader2 = System.class.getClassLoader();
System.out.println(classLoader2);
//获取classLoaderTest类的加载器以及加载器的父加载器
ClassLoader loader = ClassLoaderTest.class.getClassLoader();
while(loader!=null) {
System.out.println(loader.getClass().getName());
loader = loader.getParent();
}
System.out.println(loader);
}
}
类加载器的委托机制
Java虚拟机中的所有类加载器采用具有父子关系的树形结构进行组织如下图,在实例化每个类加载器对象时,需要为其指定一个父级加载器对象或默认采用系统加载器为其父类加载。
当java虚拟机要加载一个类时,到底由哪个类加载器加载呢?
1. 首先当前线程的类加载器去加载线程中的第一个类。
2. 如果A类中引用了B类,java虚拟机将使用加载A类的加载器来加载B类
3. 还可以直接调用ClassLoader.loadClass()方法来指定某个类加载器去加载某个类
每个类加载器在加载类时,又先委托给其上级类加载器。
1. 当所有上级类加载器没有加载到类时,回到发起者类加载器,还没有加载到类会抛出ClassNotFoundException,不会在找发起者类加载器的下级加载器,因为没有getChild方法,即使有,那有多个儿子,该去找哪一个?
2. 对类加载器的层次结构图和委托加载器原理,解释先前将ClassLoaderTest输出到jre/lib/ext目录下的itcast.jar包中后,运行结果为ExtClassLoader的原因。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
java黑马程序员 java黑马程序员ppt
一、什么是软件 软件就是一系列按照特定顺序组织的计算机数据和指令的集合 二、什么是开发 &nbs
java黑马程序员 java 首字母 数据类型 -
黑马程序员MySQL资料 黑马程序员介绍
1..Net/dotnet:一般指.Net FrameWork 框架、一种平台、一种技术。 C#:一种编程语言,可以基于.net平台应用,它简化了C++语言在类、命名空间、方法重载和异常处理等方面的操作,它摒弃了C++的复杂性,更易使用,更少出错。它使用组件编程,和VB一样容易使用。2.C/S(Client/Server)架构:基于操作系统平台的客户机/服务器架构 Winform :桌面应用程序
黑马程序员MySQL资料 windows phone radiobutton powerpoint .net