核心:如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,最终将到达顶层的启动类加载器
1.类加载到底是什么:将字节码文件(二进制文件)读入到内存中,并将其放到方法区内,然后再在堆区中创建相应的Class类的对象(这个Class类对象就是类加载的最终产品)
类加载过程:
(1)加载:读入字节码文件

(2)链接(验证,准备,解析)
(3)初始化(静态变量初始为指定值,执行静态代码块)
(4)使用
(5)卸载
2.类加载器的种类:
启动类加载器(也叫根加载器) Bootstrap ClassLoader,没有父类
扩展类加载器 Extension ClassLoader,父类加载器为启动类加载器
应用程序类加载器 Application ClassLoader,父类加载器为ExtClassLoader
自定义类加载器 通过继承ClassLoader实现,一般是加载我们的自定义类父类加载器为AppClassLoader

3.双亲委派机制
总结:就是先让父加载器去加载,父加载器加载不了再自己来加载
如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,最终将到达顶层的启动类加载器
如果父类加载器可以完成类加载任务,就有父类加载器来完成加载,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载
每个儿子都很懒,每次有活就丢给父亲去干,直到父亲说这件事我也干不了时,儿子自己想办法去完成
通过这种层级关可以避免类的重复加载,当父亲已经加载了该类时,就没有必要子ClassLoader再加载一次