1.什么是类的加载?
当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载、连接、初始化三不来实现对类的初始化。
1.1加载
将class文件读入内存,并为之创建一个class对象。任何类被使用时,系统都会建立一个class对象。
1.2连接
(1)验证:是否有正确的内部结构,并且和我其他类协调一致。
(2)准备:负责为类的静态成员分配内存,并设置默认的初始值。
(3)解析:将二进制找数据中心的符号引用替换为直接引用。
1.3初始化
2.类的加载时机
main类中使用其他类中任何东西时,其他类必须被加载到内存中。
(1)创建类的实例
(2)类的静态变量 ,或者为静态变量赋值
(3)类的静态方法
(4)使用反射的方式来强制创建某个类/接口对应的java.lang.class对象
(5)初始化某个类的子类
(6)直接使用java.exe命令来运行某个主类
3.类加载器组成
(1)Bootstrap classLoader 根类加载器
作用:负责java核心类的加载,如System、String类等。
(2)Extension classLoader 扩展类加载器
作用:负责JRE的扩展项目有中jar包的加载,在JDK中JRE的lib目录下的ext目录
(3)System classLoader 系统类加载器
作用:负责在JVM(java虚拟机)启动时,加载来自java命令的class文件,以及classpath环境变量锁指定的jar包和类路径。