陈述事实:
教学视频中,MyClassLoade类中loadClass(String name)这个继承自ClassLoader类,该方法内部会调用findClass(String name)方法,而MyClassLoader里已经被覆盖了继承来的findClass(String name)。
描述现象
在调试时发现,调用myClassLoader.loadClass(className)时,跟踪到父类ClassLoader里loadClass(String name, boolean resolve)中一个语句:c = findClass(name)时,发现调用的竟然不是MyClassLoader的findClass方法,而是URLClassLoader里的findClass方法。
问题:
请问各位码友,为什么是这样?
上图片:
URLClassLoader是ClassLoader的一个子类,java加载时逐级上传,当前类加载器无法加载时抛给父级加载器,当父级加载器为null时bootstrapclassloader充当父级加载器启动。这里看应该是先传给了URLClassLoader加载器,调用它的findclass。URLClassloader这个是用来安装指定路径加载资源的一个加载类。classloader只能加载classpath下的类。我猜可能是因为代码中给定了要加载类的路径,所以java先传给了URLClassLoader类加载器。如果这个加载器无法加载还会继续传递给父类classloader