1.介绍
1.1 概述
是一种类的加载机制,类加载器之间形成了一种类似加载器链的模型,每个类加载器都有一个父类加载器,形成从下到上的一种继承链,如果所有类的加载器无法加载就会抛出异常(ClassNotFoundException)
1.2 模型图
2. 加载流程及优点
2.1 流程
·一个类的加载先由启动类加载器进行加载(bootstrap ClassLoader)加载
·当启动类加载器无法加载,交由拓展类加载器进行加载(Extension classLoader)
·当拓展类加载器无法加载交由应用程序类加载器(Application ClassLoader)依次类推
·如果所有类加载器都无法加载就会抛出异常(classNotFoundException)
2.2 优点
·可以保证类的唯一性和安全性,每个类加载器都只能加载自己命名空间内的类
·加载器之间形成一种继承链,可以保证安全性,防止恶意代码注入
3.模型的作用
可以避免重复加载同一个类
举例:比如jdk自带的对应object放在rt.jar中的类,无论使用哪个类加载器加载,最终都会委派给最顶端的启动类加载器(Bootstrap classLoader)进行加载,不同的加载器加载的object类都是同一个,如果没有双亲委派模型,每个类加载器自行去加载的话就会出现重复
注:
1)当不同类加载器加载同一个类时,每个类加载器都会在自己的命名空间中创建一个新的class对象,即便是class字节码相同,也会被认为是不同的类,
2)重复加载同一个类会出现问题,例如类的静态变量和代码快会被多次执行
=============================================
后续追加更新自定义加载器实现demo…