类加载器分为:引导类加载器,扩展类加载器和系统类加载器,引导类加载器加载的是java最核心的类库,扩展类加载器加载的是JVM提供的扩展类库,系统类加载器则是我们比较熟知的需要按路径来加载的类,其中引导类加载器是扩展类加载器的父类,扩展类加载器是系统类加载器的父类,当JVM加载类时是按照这个过程进行的:A类加载器在加载一个.class字节码时,它会先把这个字节码交给它的父类B加载器去加载,B类加载器在加载此字节码时会先将字节码交给它的父类去加载,如此类推(如果父类不能加载,再返回给子类)。由此可知,当在加载某字节码时,首先启动加载的是系统类加载器,而正真完成字节码加载的则可能会它的父类加载器。由此也不难看出,决定启动加载字节码的加载器和最终加载成功字节码的加载器不一定相同。(这是我百度后的理解^^) |