ClassLoader的双亲委派机制,源码

自底而上查看类是否加载过:

  • 1 检查类对象是否被加载过
  • 2 如果被加载过,直接返回Class对象
  • 3 如果没有被加载过,则调用parent中的loadClass方法,重新回到第 1 步
    ( 如果parent为空,则调用native的findBootstrapClassOrNull方法)

自顶而下尝试加载类:

  • 1 使用findClass方法,从硬盘上查找是否有对应的字节码文件
    • 有则加载该字节码进内存
    • 没有该字节码文件,则抛出异常。

    会捕获所有parent的loadClass方法的异常。
    如果自顶而下没有找到该字节码文件,那么最后会从用户自定义的类加载器中查找字节码文件
    此时的异常没有被捕获,会被抛出。

原文地址:https://www.cnblogs.com/llf7/p/13246609.html