1 jvm优化静态常量的常量池
题目: 写出下面程序的执行结果
public class Demo {
final static int num=10;
final int ns = 11;
static {
System.out.println("Demo静态块");
}
public Demo() {
System.out.println("Demo无参构造方法");
}
}
class Test {
public static void main(String[] args) {
System.out.println(Demo.num);
}
}
如果你的答案是:
Demo静态块
10
那么恭喜你答错了, 有人会问Demo.num不是加载Demo类了吗? 静态块为什么没执行?
其实当在类中声明并初始化静态常量时, jvm为了优化静态常量, 会把静态常量放进常量池, 这样当我们用类名调用静态常量时, 其实并没有去加载类, 而是从常量池中取出.
这种情况只会发生在你只去访问哪个类的静态常量时
所以正确答案是
10