我明白你的意思,其实是这样的,自顶向下加载是正确的,但是之前还有一步,那就是自低向上查找是否已经被加载。
首先是发起委托的类的类加载器,如果这个类加载器没有加载过需要加载的类,那么找上一级,看看上一级是否已经加载过你需要加载的类,如果已经加载过,就可以直接拿来用了,如果没加载过再继续往上找。如果沿途的类加载器都之前都没有加载过这个类,那么最终会委托到bootstrap,让bootstrap来进行加载。
然后bootstrap就试着加载了呗,但是他在自己的地盘不一定能找到需要加载的类的字节码文件,所以他就让他的子类加载,这样一步一步向下尝试,直到某个加载器在自己的地盘找到了需要被加载的那个类的字节码文件,就加载成功了。如果一直找到发起委托的类加载器还是没有找到需要的字节码文件,就会报异常。 |