如何理解不同类加载器加载的类不可以互相调用

2020-09-30  本文已影响0人  浅乔未果

不同类加载器加载的类不可以互相调用

专业术语:定义类加载器、初始类加载器

在java中加载器分为4种:

1、appClassLoad 应用程序加载器

2、etcClassLoad 扩展类加载器

3、bootStrapClassLoad(root) 根加载器

4、自定义加载器

怎么理解不同类加载器加载的类不可以互相调用?

当创建一个类Test时由appClassLoad类加载器加载,当引入变量String时,String根据双亲委派机制,一层一层往上查询,应该appClassLoad-》etcClassLoad-》bootStrapClassLoad最终由bootstrap加载,在这个过程种appClassLoad和etcClassLoad被定义位初始加载器,bootstrap被定义为定义类加载器,每个加载器当中都有一个命名空间,也就是记录表,记录着所有此类的初始类加载器,所以在Test类是以可使用到String的。

一个类通过不同的加载器,加载到方法区中,会生成两个不同的类,互相是不可以遇见的,而且在堆中也会生成不同的对象实例。

自定义类加载器是为了解决当.class文件不在classpath路径中时,寻找加载.class而存在的

上一篇下一篇

猜你喜欢

热点阅读