一.类的加载
加载器继承关系图
根加载器 ,底层是操作系统
扩展加载器, 底层是java代码
二. 类的连接
1.验证 确保类的正确性
.class文件结构检查
语义检查 比如final修饰的类,不允许有子类
字节码验证 确保字节码流被JVM可以顺利执行
二进制兼容的验证
2.准备 把类中所有由static修饰的内容,开辟空间,然后赋予默认值
比如说我们Student类中有一个static int age=20;
会根据数据类型 先开辟空间 int类型会开辟4个字节
赋初始值age=0;
3.解析 把类中的符号引用转换成直接引用
比如说我们Student类中有一个方法 定义如下
public void sayHello(){
teacher.sayHello();
}
其中teacher.sayHello( ) 直接指向Teacher类中的sayHello( )
三. 类的初始化 给类的静态变量 赋予初始值
1.类必须完成加载和连接,才能执行初始化
2.如果类有父类必须先加载和连接父类
3.如果类中存在初始化语句,那么执行
类的初始化时机
1.创建类的实例
new
反射
克隆
2.调用类的静态方法
类初始化了,但是还没有实例