说明:笔记内容来源于《北京圣思园教育 - 张龙老师 - 深入理解JVM》视频课程。如有侵权,请联系删除。
1、常量的本质含义
1.1、常量的值在编译阶段可以确定
如果常量的值在编译阶段可以确定,
则常量在编译阶段会被存储在调用这个常量的方法所在的类的常量池中。
本质上,调用类并没有直接引用到定义常量的类,因此并不会触发定义常量的类的初始化。
具体看下面的例子。
package com.test;
public class StringTest {
public static void main(String[] args) {
System.out.println(ParentStr.string);
}
}
class ParentStr {
//没有final修饰
public static String string = "Hello World";
static {
System.out.println("ParentStr static block");
}
}
执行结果为:
package com.test;
public class StringTest {
public static void main(String[] args) {
System.out.println(ParentStr.string);
}
}
class ParentStr {
//final修饰,常量
public static final String string = "Hello World";
static {
System.out.println("Par