Example.java
public class Example {
static final int i = 10;
static int j = 20;
static {
System.out.println("Example class loaded and initialized");
}
}
使用.java
import java.util.Scanner;
public class Use {
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int ch = 1;
while(ch != 0) {
System.out.print("Enter choice: ");
ch = sc.nextInt();
if (ch == 1) {
System.out.println("Example's i = " + Example.i);
} else if(ch == 2){
System.out.println("Example's j = " + Example.j);
}
}
}
}
当我运行java -verbose:class Use, 并给出输入时,1输出10就是常i数值。但是Example类还没有加载。但是,当我输入 as 时2,只有 Example 类被加载到 JVM 中,如详细输出所示,然后执行 Example 内的静态块,并且j初始化然后打印的值。
我的查询是:如果对于输入,1即当一个类的静态最终(常量)值Example在另一个类中被请求时,那么如果在此之前该类从未加载到 JVMUse中,那么从哪里获取该常量值?Example静态 final 何时以及如何i初始化并存储到 JVM 内存中?