JAVA中的类加载器

类加载器

1. 什么是类加载器

  • 把.class文件加载到JVM的方法区中,变成一个Class对象!

2. 得到类加载器

  • Class#getClassLoader()

3. 类加载器的分类
它们都是片警!

  • 引导:类库!
  • 扩展:扩展jar包
  • 系统:应用下的class,包含开发人员写的类,和第三方的jar包!classpath下的类!

系统类加载器的上层领导:扩展
扩展类加载器的上层领导:引导
引导没上层,它是BOSS

======================================

4. 类加载器的委托机制

  * 代码中出现了这么一行:new A();
    > 系统发现了自己加载的类,其中包含了new A(),这说明需要系统去加载A类
    > 系统会给自己的领导打电话:让扩展去自己的地盘去加载A类
    > 扩展会给自己的领导打电话:让引导去自己的地盘去加载A类
    > 引导自己真的去rt.jar中寻找A类
      * 如果找到了,那么加载之,然后返回A对应的Class对象给扩展,扩展也会它这个Class返回给系统,结束了!
      * 如果没找到:
        > 引导给扩展返回了一个null,扩展会自己去自己的地盘,去寻找A类
	  * 如果找到了,那么加载之,然后返回A对应的Class对象给系统,结束了!
	  * 如果没找到
	    > 扩展返回一个null给系统了,系统去自己的地盘(应用程序下)加载A类
	      * 如果找到了,那么加载之,然后返回这个Class,结束了!
	      * 如果没找到,抛出异常ClassNotFoundException

5. 类的解析过程

class MyApp {//被系统加载

main() {
A a = new A();//也由系统加载
String s = new String();//也由系统加载!
}

}

class String {//引导
private Integer i;//直接引导加载
}

=====================

6.自定义类加载器

  • 继承ClassLoader
  • 重写findClass()

=====================

7. Tomcat的类加载器
Tomcat提供了两种类加载器!

  • 服务器类加载器:${CATALINA_HOME}\lib,服务器类加载器,它负责加载这个下面的类!
  • 应用类加载器:KaTeX parse error: Undefined control sequence: \WEB at position 15: {CONTEXT_HOME}\̲W̲E̲B̲-INF\lib、{CONTEXT_HOME}\WEB-INF\classes,应用类加载器,它负责加载这两个路径下的类!

引导
扩展
系统

特性:
服务器类加载器:先自己动手,然后再去委托
应用类加载器::先自己动手,然后再去委托
图解
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值