类的加载、连接和初始化

类加载器加载Class大致过程:

  • S1: 检测此Class是否载入过(即在缓冲区是否有此class),如果有则直接进入S8,否则执行S2
  • S2: 检查父类加载器是否存在,如果存在则执行S3;如果不存在(如果没有父类加载器,要么parent一定是根类加载器,要么本身就是根类加载器),则执行S4
  • S3: 请求使用父类加载器载入目标类,如果成功则跳到S8,否则执行S5
  • S4: 请求使用根类加载器载入目标类,如果成功则跳到S8,否则执行S7
  • S5: 当前类加载器尝试寻找Class文件(从此ClassLoader相关路径中寻找),如果找到则执行S6;否则执行S7
  • S6: 从文件中载入Class,成功后执行S8
  • S7: 抛出ClassNotFoundException异常
  • S8: 返回对应的java.lang.Class对象


    类加载器加载Class.jpg

你可能感兴趣的:(类的加载、连接和初始化)