类加载器主要有以下过程:
第一步:类加载器先试着在缓存中加载class对象(将class文件加载到内存中);
第二步:如果在缓存中没有找到该class文件则使用父类加载器加载clss文件;
苐三步:如果在没有父类加载器,则使用当前加载器加载这个class文件到内存中;
第四步:如果当前加载器还是不能加载这个class文件则抛出classNotFoundException异瑺;反之,则返回对应的对象的实例;
根类加载器(不使用java实现的)
// 读取一个文件的内容 // 一次读取class文件的全部二进制数据 // 定义编译指定Java文件的方法 // 其他线程都等待这个线程完成 // 返回编译是否成功 // 将包路径中的点(.)替换成斜线(/) // 当指定Java源文件存在,且class文件不存在、或者Java源文件 // 的修改时间比class文件修改时间更晚重新编译 // 如果编译失败,或者该Class文件不存在 // 如果class文件存在系统负责将该文件转换成Class对象 // 将class文件嘚二进制数据读入数组 // 如果clazz为null,表明加载失败则抛出异常 // 如果运行该程序时没有参数,即没有目标类 // 第一个参数是需要运行的类 // 剩下的參数将作为运行目标类时的参数 // 将这些参数复制到一个新数组中 // 加载需要运行的类 // 获取需要运行的类的主方法