1,类加载机制
类被加载的整个过程(生命周期)
加载->验证->准备->解析->初始化->使用->卸载
类加载器
启动类加载器(Bootstrap ClassLoader)
拓展类加载器(Extension ClassLoader)
应用程序类加载器(Application ClassLoader)
自定义类加载器(customized ClassLoader)
2,什么是双亲委派?
作用:保证一个类可以被想对应的类加载器所加载。因为java中不同的加载器加载同一个类会产生两个类,不能保证唯一性。
对于任意一个类,都需要由它的类加载器和这个类本身一同确定其在就Java虚拟机中的唯一性
上面这种层次关系称为类加载器的双亲委派模型。我们把每一层上面的类加载器叫做当前层类加载器的父加载器,当然,它们之间的父子关系并不是通过继承关系来实现的,而是使用组合关系来复用父加载器中的代码。
双亲委派模型的工作流程是:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把请求委托给父加载器去完成,依次向上,因此,所有的类加载请求最终都应该被传递到顶层的启动类加载器中,只有当父加载器在它的搜索范围中没有找到所需的类时,即无法完成该加载,子加载器才会尝试自己去加载该类。
使用双亲委派模型来组织类加载器之间的关系,有一个很明显的好处,就是Java类随着它的类加载器(说白了,就是它所在的目录)一起具备了一种带有优先级的层次关系,这对于保证Java程序的稳定运作很重要。例如,类java.lang.Object类存放在JDK\jre\lib下的rt.jar之中,因此无论是哪个类加载器要加载此类,最终都会委派给启动类加载器进行加载,这边保证了Object类在程序中的各种类加载器中都是同一个类。
3,破坏双亲委派模型
不破坏重写findClass()
破坏重新 loadClass()