一个类引用其它类的final类型的常量时会直接在编译阶段放入自己类的常量池,因此在运行时使用该常量时,不会引起被引用的常量所在的类的初始化。
package cn.edu.tju;
public class OtherClass {
public static final int x=2023;
static {
System.out.println("in other class...");
}
}
package cn.edu.tju;
public class InitTest2 {
public static void main(String[] args) {
System.out.println(OtherClass.x);
}
}
输出:
但是有特殊情况,对于编译器无法确定值得常量,则不适用上述规则。
package cn.edu.tju;
import java.util.UUID;
class OtherClass3{
public static final String str = UUID.randomUUID().toString();
static {
System.out.println("in other class 3...");
}
}
public class InitTest3 {
public static void main(String[] args) {
System.out.println(OtherClass3.str);
}
}
输出: