类加载器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类加载器相关的知识,希望对你有一定的参考价值。
public class TestCL {
/*
* 类加载:负责将class文件(字节码)加载到内存生成Class对象 工具类。
* JDK规定3种类加载器:
* 1.应用类类加载器,AppClassLoader
* * 负责加载 /WEB-INF/classes (src编写后位置) 和 /WEB-INF/lib (jar保存位置)
* 2.扩展类类加载器,ExtClassLoader
* * 负责加载 jdk1.7.0_72\jre\lib\ext (一般没有用)
* * 扩展 是 应用 的父加载器
* 3.引导类类加载器,BootstrapClassLoader
* * 负责加载 jdk1.7.0_72\jre\lib --> rt.jar (runtime)
* * 不是类(由非Java程序编写的)
* * 引导 扩展 父类
*
* 原则:全盘负责委托机制
* * 全盘负责:A类如果需要使用B类,B类不在内存,需要使用A类的类加载器,加载B类。
* * 委托机制,应用在加载前,先从扩展获取,如果有就直接使用,如果没有在加载。
* ,扩展在加载前,先从引导获取,如果有就直接使用,如果没有在加载。
* 使用此机制,可以保证一个类只能加载一次。
*
*
*/
@Test
public void demo01(){
ClassLoader cl = TestCL.class.getClassLoader();
System.out.println(cl);
ClassLoader cl2 = TestCL.class.getClassLoader().getParent();
System.out.println(cl2);
}
@Test
public void demo02(){
ClassLoader cl = DNSNameService.class.getClassLoader();
System.out.println(cl);
ClassLoader cl2 = DNSNameService.class.getClassLoader().getParent();
System.out.println(cl2);
}
@Test
public void demo03(){
ClassLoader cl = String.class.getClassLoader();
System.out.println(cl);
}
}
以上是关于类加载器的主要内容,如果未能解决你的问题,请参考以下文章