双亲委派机制
类的加载流程如下图:
假如系统当前线程要加载一个类,首先获取对应的类加载器,类加载器会去找它的parent加载,层层往上直到Bootstrap ClassLoader引导类( 注意# 这个类我们在class文件找不到,它是由c/c++实现的),然后引导类Bootstrap开始加载类,如果它找不到,就会返回空,往下走,由child类进行加载。以此类推。
从这段代码我们可以看到,当前线程默认加载器为AppClassLoader。
具体代码如下:
AppClassLoader
static class AppClassLoader extends URLClassLoader {
...
public Class<?> loadClass(String var1, boolean var2) throws ClassNotFoundException {
int var3 = var1.lastIndexOf(46);
if (var3 != -1) {
SecurityManager var4 = System.getSecurityManager();
if (var4 != null) {
var4.checkPackageAccess(var1.substring(0, var3));