文章1 举例说明了Classloader的加载顺序以及反射的应用等。
文章2 说明:
loadClass方法:
没有被标记为final,也就意味着我们是可以override这个方法的,也就是说双亲委托机制是可以打破的。
findClass方法:
在写自己的ClassLoader的时候,如果想遵循双亲委托机制,则只需要override findClass
。
假如我们自己写了一个String
的类,我们是否可以替换调JDK本身的类?
答案是否定的。我们不能实现。为什么呢?我看很多网上解释是说双亲委托机制解决这个问题,其实不是非常的准确。因为双亲委托机制是可以打破的,你完全可以自己写一个classLoader来加载自己写的String
类,但是你会发现也不会加载成功,具体就是因为针对java.*开头的类,jvm的实现中已经保证了必须由bootstrp来加载。
文章3 更加详细的分析了类加载的顺序。