1、类的加载初始化
- 初始化阶段就是执行类构造器方法<clinit>()的过程。
- 此方法不需要定义,是javac编译器自动收集类中的所有 类变量 的赋值动作和 静态代码块 中的语句合并而来。
package com.jvm.java;
public class ClassInitTest {
private static int num = 1;
static{
num = 2;
number = 20;
System.out.println(num);//2
//System.out.println(number);报错:非法的前向引用。Illegal forward reference
}
//linking之prepare:number = 0--> initial:20-->10
private static int number = 10;
public static void main(String[] args) {
System.out.println(ClassInitTest.num);//2
System.out.println(ClassInitTest.number);//10
}
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=22486:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Test;D:\develop\maven\repository\junit\junit\4.13.1\junit-4.13.1.jar;D:\develop\maven\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar com.jvm.java.ClassInitTest
2
2
10
Process finished with exit code 0