Java中ClassLoader类加载器的作用范围以及双亲委派模型

类加载器:

    JVM定义把类加载阶段中的“通过类的全名称获取此类的二进制流”这种操作实现的模块叫做类加载器。


    BootStrap(启动类加载器):使用C++实现,是将JVM自身的一部分;启动加载器负责加载存放于<Java_HOME>\lib目录中能被JVM识别;启动类加载器无法被java直接引用。
    ExtClassLoader(扩展类加载器):他负责加载<Java_HOME>\lib\ext目录中或者java.ext.dirs系统变量指定的类库,开发者可直接使用扩展类开发器。
    AppClassLoader(应用程序类加载器):负责加载用户路径(ClassPath)指定的类库,如果应用程序没有自定义类加载器,则默认使用此加载器。
    自定义类加载器:必须继承ClassLoader。


双亲委派模型:

    类加载器的层次关系,称为类加载器的双亲委派模型。除了顶层的启动类加载器外,其余的类加载器都应有自己的父类加载器。
    工作流程:如果一个类加载器收到了类加载的请求,他不会直接加载此类,而是先把这个请求委托给父类,每一个层次的类加载器都是如此,因此加载请求都会先传到顶层的BootStrap加载器中,只有父类加载器反馈无法完成这个加载请求时,子加载器才会尝试去加载。 

    优点:保证java程序的稳定运行,基础类库不会被其他自定义的同名类的影响,无论哪个加载器要加载Object类,最终都是委派给启动类加载器加载,Objec类在程序的各种类加载器环境都是同一个类。    

    比较两个类是否相等前提,必须是由同一个类加载器加载。

猜你喜欢

转载自blog.csdn.net/weixin_41891854/article/details/81583472