本文重点
前面的课程中,我们已经学习了双亲委派机制,如果想要自定义一个类加载器,那么我们只需要继承ClassLoader,并且定义好自己的findClass就可以了,也就是自己的类加载器是如何进行工作的,而loadClass就是双亲委派机制,我们直接使用ClassLoader的就可以了,这样就没有破坏双亲委派机制。
自定义类加载器
Shiy这个类因为没有放在当前目录下,所以调用loadClass(packageNamePath)的时候,仅仅传递了类的名字,App加载器加载不到,所以此时就会通过双亲委托机制最后还是落到我们自定义的类加载器手里,而我们的自定义类加载器知道绝对路径,所以肯定可以找到它并且加载,也就是调用findClass方法,下面我们看一下它的逻辑:
如上所示就是读取class文件,并且将其转变为二进制byte数组中,然后调用defineClass方法就可以将byte数组转变为class对象了,此时加载工作完成。
注意点
需要保证在D盘下有一个Shi.class