不同类加载器加载的类不可以互相调用
专业术语:定义类加载器、初始类加载器
在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而存在的