类加载器的种类
1.启动类加载器(bootstrapClassLoader)
这个类加载器不是由java代码实现的
这个类加载器专门加载java系统中最重要最基本的类
2.扩展类加载器(ExtClassLoader)
这个类加载器是由java代码实现的
这个类加载器专门加载系统中额外添加的一些功能的jar包
3.应用类加载器(AppClassLoader)
这个类加载器是java代码实现的
这个类加载器专门加载系统中用户自己编写的项目代码
4.自定义类加载器
类加载的过程
启动类加载器,扩展类加载器和应用类加载器这三个类加载器共同协作,使用【双亲委托】的方式,把一个class文件中的类加载到内存
向上委托,向下加载
例如:要运行Hello.class文件中的类,首先加载任务就交给了AppClassLoader,然后AppClassLoader又这个任务委托给自己的父加载器,也就是ExtClassLoader,然后ExtClassLoader也会把这个任务继续委托给自己的父加载器,也就是bootstrapClassLoader,然后bootstrapClassLoader就尝试去加载Hello这个类,但是在指定路径下并没有找到,然后这个任务就又交给了ExtClassLoader,这时候ExtClassLoader就尝试加载Hello这个类,但是在指定路径中也没找到,然后这个任务又交给了AppClassLoader,最后AppClassLoader从classpath中指定的路径里面找到并加载了这个Hello类,完成类加载的过程
作用:双亲委托可以避免恶意和系统中同包同名的类被加载到内存,替换系统中原有的基础类,而导致系统崩溃的情况发生