类加载器
一、 自定义类加载器
步骤:
- 继承java.lang.ClassLoader类
- 重写FindClass方法
二、 类加载器类型
- BootstrapClassLoader
- c++ 编写、加载java.*下的库
- ExtClassLoader
- java 实现、加载标准扩展库如javax.* 、classpath中的jre、java.ext.dir 指定位置中的class文件
- AppClassLoader
- java 实现、加载程序所在的目录
- 自定义ClassLoader
- 用户自定义加载器、可加载指定位置的class文件
三、 双亲委派机制
类加载器双亲委派模型是从JDK1.2以后引入的,并且只是一种推荐的模型,不是强制要求的,因此有一些没有遵循双亲委派模型的特例:(了解)
- 什么是双亲委派?
- 当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类。
- 双亲委派的作用?
- 防止重复加载.class文件。通过委托去询问上级是否已经加载过该.class,如果加载过了,则不需要重新加载。保证了数据安全。
- 保证核心.class不被篡改。通过委托的方式,保证核心.class不被篡改,即使被篡改也不会被加载,即使被加载也不会是同一个class对象,因为不同的加载器加载同一个.class也不是同一个Class对象。这样则保证了Class的执行安全。
- 怎样打破双亲委派机制?
- 重写loadClass
- 使用线程上下文类加载器