一、引用常量池中的常量,不会导致类的初始化。代码如下:
public class MyTest02 {
public static void main(String[] args) {
System.out.println(MyParent02.m);//MyParent02.str 编辑阶段存入到MyTest02的常量池中。不会初始化MyParent02
}
}
class MyParent02 {
public static final String str = "hello world";
public static final short s = 7;
public static final int i = 128;
public static final int m = 1;
static {
System.out.println("MyParent01 loading");
}
}
结果:
1
说明:
* 常量在编译阶段会存入到调用这个常量的方法的所在类的常量池中
* 本质上,调用类并没有直接引用到定义常量的类
* 因此并不会触发,定义常量的类的初始化
* 注意:这里指的是将常量存放到了MyTest02的常量池中,之后MyTest02与MyParent02就没有任何关系了
* 甚至,可以将MyParent02的class文件进行删除