总结:
①该方法会首先调用 findLoadedClass()
方法来检查该类是否已经被加载过;如果没有加载过的话,会调用父类加载器的 loadClass()
方法来尝试加载该类;如果父类加载器无法加载该类的话,就调用 findClass()
方法来查找该类。因此,为了保证类加载器都正确实现代理模式,在开发自己的类加载器时,最好不要覆写 loadClass()
方法,而是覆写findClass()
方法。
②当加载该类的时候,会首先加载并初始化父类,然后再加载子类。
③当该Class所依赖的和引用的其他的Class也由该类加载器加载。
问题:
拿jdbc来说,根加载器会加载jdbc的api一些核心接口,然后我们在应用的时候通过Class.forName("driver名称"),来加载驱动,那么这两个不同的加载器加载的接口类型,与驱动实现类型是否会存在类型不兼容的问题呢?事实上没有这种兼容问题。思考:或许是继承不太一样吧。或许这就不是个问题。对于同个类,用两种加载器加载,两个类型必定不兼容,这是肯定的。因为标识每个类的类型的标识与包名和加载器有关系。或许继承方面的类型问题,就不存在,想多了,这里拿出来说,就是提醒以后注意下吧。