类加载器
类加载器概述
作用:
加载Class文件
加载Class文件是Java的核心标识
举例:
1)new Cola();都有什么操作?
1.有一个实体类Cola,该类是抽象的,当我们进行new Cola()就会有具体的实例了,具体实例的引用在java栈里面,具体的实例在堆里面(名称在栈里面,真正的数据在堆里面,根据内存地址去找到堆里面的数据)
类是模板(抽象的),对象是具体的
2)Cola.class文件都会在JVM经历什么过程?
1.Cola.class进入到Class Loader,加载并初始化,得到Cola Class
2.接着进行实例化(关键词是new),得到Cola1,Cola2,Cola3,etc对象(这些对象都来自于Cola Class这一个模板)
怎么将对象再变成Class呢?
对象.getClass()
怎么将Class再变成ClassLoader呢?
类.getClassLoader()
类加载器种类
1.虚拟机自带的加载器
2.启动类(根)加载器
BootClassLoader
3.扩展类加载器
ExtClassLoader 地址:\jre\lib\ext
4.应用程序加载器
AppClassLoader
如果输出加载器的值是null,则表明java调用不出来该加载器,该加载器是用C或者C++等编程语言进行编写的
双亲委派机制
双亲委派机制:保障程序安全
向上找加载器:
App --> EXC --> BOOT(最终执行)
如果最上层的加载器没有相应的jar包,就一层层往下找
当类加载器收到类加载的请求,将这个请求向上委托给父类加载器去完成,一直向上委托,直到根加载器,根加载器检查是否能够加载当前这个类,如果能加载就使用当前的加载器并结束,否则抛出异常,通知子加载器进行加载,不断的向下找能加载的加载器直到找到
我们所编写的程序大部分都是在AppClassLoader中加载的
如果所有加载器都不能进行加载该类,则会报错:Class Not Found