一、类加载器
1.什么是类加载器
类加载器:负责将.class文件(存储的物理文件)加载到内存中
2.类加载时机:
① 创建类的实例(对象)
② 调用类的实例方法
③ 访问类或者接口的类变量,或者为该类变量赋值
④ 使用反射方法来强制创建某个类或接口对应的java.lang.Class对象
⑤ 初始化某个类的子类
⑥ 直接使用java.exe命令来运行某个主类
3.类加载的过程
加载:
① 通过一个类的全限定名获取定义此类的二进制流,即通过包名+类名,获取这个类,准备用流进行传输
② 将这个字节流所代表的静态存储结构转化为运行时数据结构,即将这个类加载到内存中
③ 在内存中生成一个代表这个类的java.lang.Class对象,任何类被使用时,系统都会为创建一个java.lang.Class对象,即加载完毕创建一个class对象
验证:
链接阶段的第一步,这一阶段为了确保Class文件字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机的自身安全,即文件中的信息是否符合虚拟机规范,有没有安全隐患
准备:
负责为类的类变量(被static修饰的变量)分配内存,并且设置默认初始化值,即初始化静态变量
解析:
将类的二进制数据流中的符号引用替换为直接引用,即本类中如果用到了其他的类,此时就需要找到对应的类
初始化:
根据程序员通过程序指定的主观计划去初始化类变量和其他资源,即静态变量赋值以及初始化其他资源
statac String school=“中山大学”
类加载过程小结:
当一个类被使用的时候,才会被加载到内存
类加载的过程:加载、验证、准备、解析、初始化
二、类加载分类
jdk9 以后,类加载器分类:
启动类加载器(Bootstrap ClassLoader):虚拟机内置的类加载器
平台类加载器(Platform ClassLoader):负责加载JDK一些特殊的模块
系统类加载器(System ClassLoader):负责加载用户类路径上的所指定的类库
jdk8 类加载器分类: