类加载的三个阶段——加载、链接以及初始化,类的主动使用和被动使用

1. 类加载

1.1 加载:查找并加载字节码文件。

1.2 链接:分为三个阶段:①验证,文件格式验证:对魔数(保证是字节码类型文件)验证以及jdk版本号和当前虚拟机是否匹配;元数据验证:父类是否可以继承;是否实现了抽象方法等;字节码验证:是否符合规范。②准备:为静态变量分配内存,并设定默认值;③解析:把类的符号引用转为直接引用。

1.3 初始化为类的静态变量赋予正确的初始值。执行方法,该方法是编译器收集类中变量赋值代码和静态代码块合成产生,静态代码块可以对代码块之前的变量读写,但只能对代码块之后的变量进行写,不能读,如下图。

类加载的三个阶段——加载、链接以及初始化,类的主动使用和被动使用_第1张图片

 

 

2. 类加载的条件——主动使用

①new 对象;②操作静态成员;③反射;④加载子类;⑤程序入口类

 

3. 类的被动使用不会类加载

3.1 子类调用父类的静态成员

类加载的三个阶段——加载、链接以及初始化,类的主动使用和被动使用_第2张图片

3.2 创建数组

类加载的三个阶段——加载、链接以及初始化,类的主动使用和被动使用_第3张图片

3.3 访问final修饰、初始值是字面值

类加载的三个阶段——加载、链接以及初始化,类的主动使用和被动使用_第4张图片

类加载的三个阶段——加载、链接以及初始化,类的主动使用和被动使用_第5张图片

 

4. 静态成员初始化顺序示例

类加载的三个阶段——加载、链接以及初始化,类的主动使用和被动使用_第6张图片

类加载的三个阶段——加载、链接以及初始化,类的主动使用和被动使用_第7张图片

 

你可能感兴趣的:(Java,类加载,类的主动使用和被动使用)