面试题答案
一键面试双亲委派模型工作流程
- 类加载器关系:在Java中,存在多个类加载器,形成树形结构。主要有启动类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和应用程序类加载器(Application ClassLoader,也叫系统类加载器),此外还可以自定义类加载器。启动类加载器是最顶层,扩展类加载器是启动类加载器的子节点,应用程序类加载器是扩展类加载器的子节点。自定义类加载器一般是应用程序类加载器的子节点。
- 委托加载类流程:当一个类加载器收到类加载请求时,它首先不会自己去尝试加载这个类,而是把请求委托给父类加载器去完成,依次向上委托,直到启动类加载器。如果父类加载器可以完成类加载任务,就成功返回;只有当父类加载器无法完成这个加载任务时(它的搜索范围中没有找到所需的类),子类加载器才会尝试自己去加载。例如,应用程序类加载器收到加载请求,委托给扩展类加载器,扩展类加载器再委托给启动类加载器。若启动类加载器没找到,再由扩展类加载器尝试加载,若扩展类加载器也没找到,最后才由应用程序类加载器加载。
这种机制保证了Java核心类库的安全性,避免用户自定义类覆盖核心类,同时提高了类加载的效率,相同类不会被重复加载。