java类加载器
2014-02-16 15:10
267 查看
一,类加载器概述
1,BootStrap JRE/lib/rt.jar
ExtClassLoader JRE/lib/ext/*.jar
AppClassLoader classpath指定的所有jar或者目录
2,父子关系
BootStrap
ExtClassLoader
AppClassLoader
3,通过getParent()得到父亲加载器
那么根得到的是null,因为BootStrap是一个特殊的类加载器
是随着JVM启动而启动的,是一段C++的二进制代码
4,所有的类加载器都是一个对象
5,类加载器的委托机制
加载一直向上,让最根的类加载器加载(爷爷)
爷爷类加载器找不到,让父亲加载,父亲加载不了,
推给孙子(也就是发起者),找不到,抛出异常
不会抛给这个类加载的孩子。这样可以保证内存中
有一份唯一的字节码。
6,自定义类加载必须挂载在类加载树上
需要继承ClassLoader
7,加载一个类的时候,先使用当前线程的类加载器加载类
如果第第一个类引用了第二个类,那么第二个类的加载
是使用第一个类的类加载器,也可以强制指定一个类加载器进行加载
二,自定义类加载器
1,继承ClassLoader
2,仅仅需要覆盖findClass();
子类先使用父类的loadClass(),不成功的话使用自己的findClasss()
如果子类复写loadClass()那么就会自己干
3,defineClass()将class文件转换为字节码
1,BootStrap JRE/lib/rt.jar
ExtClassLoader JRE/lib/ext/*.jar
AppClassLoader classpath指定的所有jar或者目录
2,父子关系
BootStrap
ExtClassLoader
AppClassLoader
3,通过getParent()得到父亲加载器
那么根得到的是null,因为BootStrap是一个特殊的类加载器
是随着JVM启动而启动的,是一段C++的二进制代码
4,所有的类加载器都是一个对象
5,类加载器的委托机制
加载一直向上,让最根的类加载器加载(爷爷)
爷爷类加载器找不到,让父亲加载,父亲加载不了,
推给孙子(也就是发起者),找不到,抛出异常
不会抛给这个类加载的孩子。这样可以保证内存中
有一份唯一的字节码。
6,自定义类加载必须挂载在类加载树上
需要继承ClassLoader
7,加载一个类的时候,先使用当前线程的类加载器加载类
如果第第一个类引用了第二个类,那么第二个类的加载
是使用第一个类的类加载器,也可以强制指定一个类加载器进行加载
二,自定义类加载器
1,继承ClassLoader
2,仅仅需要覆盖findClass();
子类先使用父类的loadClass(),不成功的话使用自己的findClasss()
如果子类复写loadClass()那么就会自己干
3,defineClass()将class文件转换为字节码
相关文章推荐
- java传智播客入学题目总结
- JAVA OOP 基础知识提纲
- Java 默认修饰符 总结
- java并发编程学习总结(基础篇)
- java post数据服务器拒绝的解决方法
- java String类(字符串)的方法
- java 类的加载,与获得相应的方法
- java打印当前方法名示例分享
- Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(五)
- Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(四)
- Java Generics 特例
- java回调函数的应用,andriod简单2d动画显示!
- Java学习之提高!初步接触eclipse和知识复苏(因为有不少是前面提到的)
- Java学习第25天:正则表达式
- java如何探测数组当中相同的连续值?
- java相关配置
- eclipse下进行scala应用程序开发入门
- Java学习第21天:IO流之知识补充
- myeclipse 8.5安装freemarker插件方法
- Java学习第20天:IO流中的File对象和一些只是(如Properties)