类加载是一个递归过程:
向上递的过程:要加载一个类的.class文件成时,自己先会判断这个类是否已经被自己加载过,如果加载过,则直接返回Class对象,如果自己没有加载过,就会调用父类的loadClass()去加载,父类也先判断这个类是否被自己加载过,如果没有,还是调用父类的loadClass()去记载,这样向上递,直到调用到最上层的加载对象,最上层的对象也会判断自己是否加载过,没有则返回null, 有则直接返回类对象。
向下归的过程:判断上层的返回对象是否为空,不为空,则直接返回,为空,则需要自己去加载类对象,并将结果返回给下层,这样一步步向下传递。
protected Class<?> loadClass(String name, boolean resolve)
throws ClassNotFoundException
{
synchronized (getClassLoadingLock(name)) {
// 首先检查这个classsh是否已经加载过了
Class<?> c = findLoadedClass(name);