常量在编译阶段会存入到调用这个常量的方法所在的类的常量池中
本质上,调用类并没有直接引用到定义常量的类,因此并不会触发定义常量的类的初始化
执行结果:hello world
注意:这里指的是将常量存放到了MyTest2的常量池中,之后MyTest2和MyParent2就没有任何关系了,甚至可以把myparent2的class文件删除。
但是
1)如果把final去掉,那么就是对myparent的主动使用(调用类的静态变量)
2)如果str是随机生成,在编译阶段并不知道值是多少,那么仍然会初始化此类
public class MyTest2 {
public static void main(String[] args) {
System.out.println(MyParent2.str);
}
}
class MyParent2{
//去掉final就会初始化此类
public static final String str="hello world";
static{
System.out.println("myparent2 static block");
}
}