解释双亲委派模型及其优势。
双亲委派模型是Java类加载器的一个重要特性,它可以确保Java核心库的类型安全。
在双亲委派模型中,如果一个类加载器收到了类加载请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中。只有当父类加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去加载。
这种模型的好处是,由于启动类加载器是最顶部的加载器,因此它加载的都是最可信任的类库(Java的核心类库),这样可以确保Java应用最核心的类库不会被恶意的代码所替代。同时,这种机制也使得我们的Java类库可以直接被其他的类库复用。
举个例子,比如我们在编写自己的String类时,虽然我们可以在代码中创建自己的String类,但是在运行时,JVM会优先使用由启动类加载器加载的Java核心类库中的String类,而不是我们自己编写的。这就是双亲委派模型的一个应用场景。