A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 周发建 中级黑马   /  2016-3-31 13:24  /  565 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一、类加载器(一)file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB95D.tmp.jpg类加载器ClassLoader
/**
* BootStrap       jre/lib/rt.jar
* ExtClassLoader  jre/lib/ext/*.jar
* AppClassLoader  classpath指定的所有jar
*
* 1. 先用当前线程的类加载器去加载字节码
* 2. 如果A引用了B,加载B就用A的加载器
*
* 类加载器的委托机制,先让父加载器去加载:从而可以保证同一个类在内存中只有一份字节码。
* 1. 发起者先让父加载器去找
* 2. 如果父加载器找不到,依次从上到下,到发起者
* 3. 如果还找不到,就抛异常
*
类加载器采用cache机制,如果cache中保存了这个
Class就直接返回它,如果没有才从文件中读取和转换
Class,并存入cache,这就是为什么修改了Class必须重启JVM才能生效、且类只能加载一次的原因。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB96E.tmp.jpg * 高级问题:tomcat的web项目
response.setContentType(“text/html”);
PrintWriter out = response.getWriter();
ClassLoader loader = this.getClass().getClassLoader();
while(loader != null){
out.println(loader.getClass().getName()+”<br/>”);
loader = loader.getParent();
}
out.close();
输出结果:
WebAppClassLoader
StandardClassLoader
AppClassLoader
ExtClassLoader
*
* 配置文件
* web项目中获取:getRealPath();
* 类加载器获取:
* Demo.class.getClassLoader().getResource("").getPath(); //相对于根路径
* Demo.class.getResource("").getPath();  //相对于包
*
* 自定义类加载器
* 模板方法设计模式
*/

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马