0
点赞
收藏
分享

微信扫一扫

静态代码块的加载2


一个静态代码块内有一个静态变量

public class SupClass {
static{
System.out.println("我是静态代码块");
}
static String VALUE = "风泊月";
}

测试类,输出

public class Test {
public static void main(String[] args) {
System.out.println(SupClass.value);
}
}

//输出
我是静态代码块
风泊月

在静态变量前+final ,结果就变了

public class SupClass {
static {
System.out.println("我是静态代码块");
}
static final String VALUE = "风泊月";
}

输出结果

静态代码块的加载2_静态代码块

这是为什么呢,为什么没有输出“我是静态代码块”?

      因为虽然在java源码内引用了SupClass中的常量 value ,但其实在编译阶段通过常量的传播优化,已经将这个VALUE存到了Test类中的常量池内,以后Test 对 SupClass.VALUE 的引用都被实际转化为自身常量池的引用。换句话说,实际上 Test的class 文件中并没有SupClass类符号的引用入口,所以编译后 两个类 就不存在任何联系了。   


举报

相关推荐

0 条评论