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

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

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

在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而存在的

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。