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 内存中?