引出问题,那么多类,继承错综复杂,java怎么加载类?
问题引出
先了解下java类加载,因为JVM最终是通过类加载器来完成类的加载的。而java的类加载器是通过双亲委派机制来加载的。类加载器有很多种如图所示。
类加载
类加载器分类
类加载器的指责的是双亲委派机制的基础。启动类加载器中的-Xbootclasspath可以指定JVM虚拟机信任的类库目录。扩展类加载器可以用java.ext.dirs指定加载的类库位置。
启动类加载器
扩展类加载器
应用程序类加载器
还有自定义继承java.lang.ClassLoader根据不同的需求实现自定义的类加载器。
复杂的类依赖关系中,如何保障类加载的安全和顺序?jvm双亲委派分为向上委派和向下委派。
当一个类进来的时候,首先进行向上委派。而且分三步。再进行向下委派。
向上委派
当到达启动类加载器后,启动类加载器无法加载该类,出现这种情况的原因,是这个class类在父类的类加载路径中不存在,出现这种情况,就会委派给子类加载器去加载,直到成功。最后还没加载到,会报classnotfound异常。
向下委派
从下往上加载,先加载java核心类,保证jdk的核心类的加载,有效避免应用程序中某些类不安全导致jvm不安全。从上往下,保证类需要加载的类,都得到了加载。最后还是没找到抛异常,会导致jvm启动失败。
加载过程
总结,双亲委派机制,保障类的唯一性和安全性。