文章目录
1.java 程序的启动
类的加载过程 - 1
a.cmd 执行 : java xxx
b.找 : jvm [or] jvm.dll in 目录 : bin\client [or] bin\server
c.初始化 : jvm -->> 产生 : Bootstrap Loader
d.产生 : Extended Loader [and] 设置父加载器为 : Bootstrap Loader
[by] Bootstrap Loader
e.产生 : System Loader [and] 设置父加载器为 : Extended Loader
[by] Bootstrap Loader
额外信息
a.编写 : Bootstrap Loader [by] c语言
b.编写 : Extended Loader [by] sun.misc.Launcher$ExtClassLoader (静态内部类)
c.编写 : System Loader [by] sun.misc.Launcher$AppClassLoader (静态内部类)
类的加载过程 - 2
加载原则 :加载任务 : 加载器 -->> 父加载器
实际加载顺序 : Bootstrap Loader -> Extended Loader -> System Loader -> java.lang.NoClassDefFoundError
a.加载类 : System Loader [by] java.class.path (系统参数) (-cp 覆盖路径)
b.加载类 : Extended Loader [by] java.ext.dirs (系统参数)
c.加载类 : Bootstrap Loader [by] sun.boot.class.path (系统参数)
(-bootclasspath 覆盖路径)
额外信息
a.sun.boot.class.path (系统参数) (默认) (-bootclasspath 覆盖路径)
D:\100-App\120-IDE\JDK\jre\lib\resources.jar;
D:\100-App\120-IDE\JDK\jre\lib\rt.jar;D:\100-App\120-IDE\JDK\jre\lib\sunrsasign.jar;D:\100-App\120-IDE\JDK\jre\lib\jsse.jar;
D:\100-App\120-IDE\JDK\jre\lib\jce.jar;
D:\100-App\120-IDE\JDK\jre\lib\charsets.jar;
D:\100-App\120-IDE\JDK\jre\lib\jfr.jar;
D:\100-App\120-IDE\JDK\jre\classes (.class)
b.java.ext.dirs (系统参数)
D:\100-App\120-IDE\JDK\jre\lib\ext; (.jar)
D:\100-App\120-IDE\JDK\jre\lib\ext\classes; (.class)
C:\WINDOWS\Sun\Java\lib\ext
c.java.class.path (系统参数) (默认) (-cp 覆盖路径)
classpath
2.建立加载器
本质就是建立一个 System Loader 的子加载器
// a.确认类的地址
URL url = new URL("path");
// b.获得类加载器对象 : 搜索地址为 path : 父加载器为 System Loader
URLClassLoader urlClassLoader = new URLClassLoader(new URL[]{url});
// c.加载类 : by name
Class<?> className = urlClassLoader.loadClass("className");