ClassLoader源码笔记
一般示意图中会把BootStrap ClassLoader画成是Ext的父类,但是BootStrap ClassLoader实际上没有父类也没有子类。所以并不是ExtClassLoader的父类。
在创建Launcher对象时,先创建ExtClassLoader再创建AppClassLoader,创建AppClassLoader时会把父类指定为ExtClassLoader,然后在getClassLoader()时会直接返回AppClassLoader。
loadClass过程:
1. 先找有没有加载类,有的话直接返回类
2. 如果没有,看有没有父类
3.如果没有父类,看bootstrap类有没有相关类
4.如果父类不为null,并且类找不到,就报ClassNotFound
常见报错
ClassNotFoundException
就是说当前的classpath下没有指定的文件存在。把文件所在的路径添加到classpath里面就可以。当前的classpath命令:
this.getClass().getClassLoader().getResource("").toString();