JVM学习笔记20——类加载器命名空间实战剖析与透彻理解
发布日期:2021-06-29 01:18:55 浏览次数:2 分类:技术文章

本文共 1171 字,大约阅读时间需要 3 分钟。

在上一节的基础上创建MyTest17_1

public class MyTest17_1 {    public static void main(String[] args) throws Exception{        // 将系统类加载器当做loader1的父加载器        MyTest16 loader1 = new MyTest16("loader1");        loader1.setPath("D:\\workspace\\");        Class
clazz = loader1.loadClass("com.yshuoo.jvm.classloader.MySample"); System.out.println("class: " + clazz.hashCode()); Object object = clazz.newInstance(); }}

只删除target里的MyCat,运行程序报错

只删除target里的MySample,运行正常

是由加载了MySample的类加载器去加载的MyCat

对MyCat做出如下改变

public class MyCat {    public MyCat(){        System.out.println("MyCat is loaded by: " + this.getClass().getClassLoader());        System.out.println("from MyCat: " + MySample.class);    }}

删除target里的MySample,运行报错

对MySample进行改造,将MyCat的改变复原

public MySample(){        System.out.println("MySample is loaded by: " + this.getClass().getClassLoader());        new MyCat();        System.out.println("from MySample: " + MyCat.class);    }public class MyCat {    public MyCat(){        System.out.println("MyCat is loaded by: " + this.getClass().getClassLoader());    }}

重新编译后再次把MySample删掉,运行正常

关于命名空间的重要说明:

  • 子加载器所加载的类能够访问到父加载器所加载的类
  • 父加载器所加载的类无法访问到子加载器所加载的类

转载地址:https://blog.csdn.net/yshuoo/article/details/116527997 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:JVM学习笔记21——类加载器实战剖析与疑难点解析
下一篇:JVM学习笔记19——自定义类加载器在复杂类加载情况的运行分析

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月19日 15时44分23秒