---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
类加载器:
有三种 1:BootStrap(非java类,伴随java虚拟机一起启动) 管辖范围:JRE/lib/rt.jar (常用的类都存在这个jar包中)
2:ExtClassLoader(java类)管辖范围:JRE/lib/ext/*.jar
3:AppClassLoader(java类)管辖范围:CLASSPATH指定的所有jar或目录。
这三个类加载器关系 BootStrap--->ExtClassLoader--->AppClassLoader 都是继承关系。
2:ExtClassLoader(java类)管辖范围:JRE/lib/ext/*.jar
3:AppClassLoader(java类)管辖范围:CLASSPATH指定的所有jar或目录。
这三个类加载器关系 BootStrap--->ExtClassLoader--->AppClassLoader 都是继承关系。
类的加载顺序是 先找父类然后依次找子类,直到当前的类加载器为止。
类加载器的委托机制,如果A类引用了B类,java虚拟机将使用A类的加载器来加载B类。每个类加载器加载是又会委托其上级类加载器加载,当所有祖宗类都没加载到这个类,回到发起着的类加载器,如果没有找到就会抛异常。
有个问题:A类(ClassPath下的类) B类(JRE/lib/ext/ 下的类) C类(ClassPath下的类)。A类包含B类,B类包含C类,当加载A类时,因为A类引用了B类,就会用A类的AppClassLoader加载器加载B类,因委托机制,加载B类就会使用ExtClassLoader类加载器,因B类引用了C类,B类的加载器就会向上找加载器,没有找到,回到发起者的B类加载器,B类加载器也没中到,就会报异常错误。