类加载机制-一站式搞定

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");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值