一、ClassLoader(类加载器)的作用:
1、把class文件加载到 jvm 中;
2、审查每个类由谁负责加载;
3、将class字节码重新解析成 jvm 统一要求的对象格式。
二、类加载器的种类(java.lang.Class类)
1、启动类价器:装载核心库
2、扩展类加载器:加载 JAVA_HOME/lib/ext下的文件(-D java.ext.dirs)
3、系统类加载器:加载java classpath目录下的类或者jar包
4、自定义加载器:逻辑由自己实现
三、类加载过程
1、首先需要将class文件加载进行jvm中,加载过程:
即双亲委派模型,一个class文件进来之后先传递到最父加载器,若不是自己职责范围内该加载的文件则进行下放,
其中,jvm如何判断两个class文件是否相同,则需要判断类的全限定名(包名+类名)是否相同,是否由同一个类加载器进行加载。
机制的好处:
1)安全性
2)统一性
2、 验证:验证.class文件是否符合jvm规范
3、准备: 为类的静态变量分配内存,并对其始化值默认值( 如:int的默认值为0)
4、解析: 将虚拟机常量池中的符号引用转换为直接引用
5、初始化:该过程与4并行执行,会为类的静态变量赋予初始值(比如: int i = 2; 准备阶段将类变量赋值0,现在修正为2)