类加载器

一、类加载器简介

1.什么是类加载器

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

2.如何得到类加载器

Class#getClassLoader()

3.类加载器的分类

    它们都是片警
            引导:类库
            扩展:扩展jar包
            系统:应用下的class,包含开发人员写的类,和第三方的jar包,classpath下的类

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

二、类加载器的委托机制

1.委托过程

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

2.类的解析过程

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

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

三、Tomcat的类加载器

1.Tomcat提供的类加载器

Tomcat提供了两种类加载器:
     服务器类加载器:
     ${CATALINA_HOME}\lib,服务器类加载器,它负责加载这个下面的类
     应用类加载器:
     ${CONTEXT_HOME}\WEB-INF\lib,${CONTEXT_HOME}\WEB-INF\classes,应用类加载器,它负责加载这两个路径下的类

2.Tomcat类解析顺序

    引导
    扩展
    系统
    服务器类加载器
    应用类加载器

    其中特性:
    服务器类加载器:先自己动手,然后再去委托
    应用类加载器:先自己动手,然后再去委托

      来源:传智播客(崔希芳老师)

    优先级:
        应用下的classes:应用类加载器
        应用下的lib:应用类加载器
        服务器下的lib:服务器类加载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值