本文重点
我们前面分析过loadClass方法,我们可以发现,这个方法的逻辑就是双亲委派机制,也就是说只要不破坏这个方法,那么就不会破坏双亲委派机制。如果要想破坏双亲委派机制,我们需要在类中重写loadClass方法,只要这样,那么就不会走双亲委派机制了。
破坏还是不破坏双亲委派机制
所以如果我们想要自定义一个类加载器(继承ClassLoader),如果我们不想要破坏双亲委派机制,那么我们只需要自己定义好findClass方法,该方法主体就是完成给定class文件路径,将其转变为Class对象的任务。这样我们可以new 自定义类加载器().loadClass(class文件路径)就可以了,虽然我们自定义的没有loadClass方法,然后它会默认使用父类ClassLoader的,所以此时并没有破坏双亲委派机制。
如果我们想要破坏双亲委派机制,我们可以重写loadClass,不再调用父类的loadClass方法,自己定义类加载的方式。这种情况很危险,因为有可能我们要加载的类还调用别的类,但是此时还会用自定义的类加载器加载,那么此时就会出现问题。
不破坏双亲委派机制
这个的执行结果为true,没有破坏双亲委派机制,因为我们只重写了findClass方法,即使中间新new了一个类加载器,也能保证同一个类被同一个类加载器加载。