类加载器
类加载器是什么
把.class文件加载到JVM的方法区中,变成一个Class对象。
得到类加载器
Class#ClassLoader()
类加载器的分类
- 引导:类库
- 扩展:扩展jar包
- 系统:应用下的Class,包含开发人员写的类,和第三方jar包。classpath下的类。
三类引导分层次。自引导由上往下分层。
类的解析过程
class MyApp {//由系统加载
main() {
A a = new A();//也有系统加载
String s = new String();//也有系统加载,最终由引导加载
}
}
class String {//引导
private Integer i;//直接引导加载
}
自定义类加载器
- 继承ClassLoader
- 重写findClass()方法
Tomcat的类加载器
Tomcat提供了两种类加载器
- ${CATALINA_HOME}\bin,服务器类加载器,它负责加载这个下面的类。
- KaTeX parse error: Undefined control sequence: \WEB at position 15: {CONTEXT_HOME}\̲W̲E̲B̲-INF\lib,{CONTEXT_HOME}\WEB-INF\classes,应用类加载器,它负责加载这两个路径下的类。
特性:
服务器类加载器:先自己动手,然后再去委托。
应用类加载器:先自己动手,然后再去委托。
优先级:由高到低
应用下的classes:应用类加载器。
应用下的lib:应用类加载器。
服务器下的lib:服务器类加载器。