您的位置:首页 > 编程语言 > Java开发

测试java中静态常量和静态变量的区别

2014-08-28 20:33 337 查看
以下是一个测试java中静态常量和静态变量区别的样例,表明两者加载时的区别。

StaticVar类中定义了静态常量FIANL_VAR和静态变量VAR,静态代码块的打印语句表示类被加载:

public class StaticVar {
static {
System.out.println("Class4Load loaded...");
}

public static String VAR = "VAR_In_LOAD";

public static final String FIANL_VAR = "FIANL_VAR_In_LOAD";
}

StaticVarLoadTest类用于测试静态变量的加载:

public class StaticVarLoadTest {

public static void main(String[] args) {
System.out.println("StaticVarLoadTest");
printStaticVar();
}

private static void printStaticVar() {
System.out.println(StaticVar.FIANL_VAR);
System.out.println(StaticVar.VAR);
}

}

输出:

StaticVarLoadTest
FIANL_VAR_In_LOAD
Class4Load loaded...
VAR_In_LOAD

输出显示在打印静态常量时,StaticVar类并没有被加载,在输出静态变量的前才打印类加载信息。这表明类的未加载的情况下也能引用其静态常量信息,原因是因为常量值存储在JVM内存中的常量区中,在类不加载时即可访问。



但是不能说所有的静态常用访问都不需要类的加载,这里还要判断这个常量是否属于“编译期常量”,即在编译期即可确定常量值。如果常量值必须在运行时才能确定,如常量值是一个随机值,也会引起类的加载,如下:

public static final int FINAL_VAR_INT = new Random(47).nextInt();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: