类初始化 常量引用

Posted 飞奔的菜鸟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类初始化 常量引用相关的知识,希望对你有一定的参考价值。

class ConstClass{
static {
System.out.println("ConstClass init");
}
public static final String HELLOWORLD = "hello world";
}
class NotInitialzation{
public static void main(String[] args){
System.out.println(ConstClass.HELLOWORLD);
//只是输出 hello world
//因为虽然在Java源码中引用了ConstClass类中的常量,但是在编译阶段将此常量
//的值存储到了NotInitialzation类的常量池中,对常量ConstClass.HELLOWORLD
//的引用实际都被转化为NotInitialzation类对自身常量池的引用
//也就是说NotInitialzation的class文件中没有ConstClass类的符号引用入口
//这两个类在编译成class之后就不存在任何联系了
}
}

以上是关于类初始化 常量引用的主要内容,如果未能解决你的问题,请参考以下文章

类加载机制

深入理解Java虚拟机——类加载的时机

深入理解Java虚拟机——类加载的时机

什么时候会发生类初始化

JVM类加载机制讲解

大三学生Java面试,题目和答案