类加载器命名空间实战剖析与透彻理解
基于上一次【 https://www.cnblogs.com/webor2006/p/9129149.html 】的程序进一步进行修改: 编译运行: 此时咱们在设置的桌面路径中将MySample.class、MyCat.class文件拷进来,如下: 此时再次运行: 依然是由系统类加载器来加载,也很好理解,还是由于工程当中已经有了该字节码文件了,好,接下来将工程中的MySample.class和MyCat.class两个字节码文件删除掉: 再次运行: 原因也如以前学习所分析的,因为系统类加载器加载不了最终就交由咱们自己的类加载器来加载了,也就是MySample里面关联的MyCat类也会由咱们自定义的类加载器所加载,比较好理解,接下来继续看,重新编译,此时MySample.class和MyCat.class文件都存在于工程当中了,下面只删除MyCat.class: 但是不要忘了桌面上这两个Class文件都有,那此时结果又会如何呢? 下面分析一下原因: 那关键就在于它是由哪个类加载器去加载,这里需要明白:它是由加载了MySample的类加载器去加载的,也就是系统类加载器,很显然是加载不了的,因为MyCat.class从工程中被删除了。 好接着再编译重新生成MySample.class和MyCat.class,这次反过来,只删除MySamle.class,而保留MyCat.class,如下