什么是双亲委派机制?
在Java中,类加载器负责加载类的字节码并创建对应的Class对象。双亲委派机制是指当一个类加载器收到类加载请求时,它会先将该请求委派给它的父类加载器去尝试加载。只有当父类加载器无法加载该类时,子类加载器才会尝试加载。
优点:
避免重复加载:通过委派给父类加载器,可以避免同一个类被多次加载,提高了加载效率。
安全性:通过双亲委派机制,核心类库由根加载器加载,可以确保核心类库的安全性,防止恶意代码替换核心类。
什么情况下会出现父类加载器无法加载的情况?
每个类型的加载器z都有其约束的加载路径,如果这个className没有在这个路径下,那么对应的类加载器就无法加载这个类了。如下图所示:
引导类加载器:负责加载支撑JVM运行的位于JRE的lib目录下的核心类库,比如
rt.jar、charsets.jar等
扩展类加载器:负责加载支撑JVM运行的位于JRE的lib目录下的ext扩展目录中的JAR
类包
应用程序类加载器:负责加载ClassPath路径下的类包,主要就是加载你自己写的那
些类
自定义加载器:负责加载用户自定义路径下的类包。