测试java中静态常量和静态变量的区别
2014-08-28 20:33
337 查看
以下是一个测试java中静态常量和静态变量区别的样例,表明两者加载时的区别。
StaticVar类中定义了静态常量FIANL_VAR和静态变量VAR,静态代码块的打印语句表示类被加载:
StaticVarLoadTest类用于测试静态变量的加载:
输出:
输出显示在打印静态常量时,StaticVar类并没有被加载,在输出静态变量的前才打印类加载信息。这表明类的未加载的情况下也能引用其静态常量信息,原因是因为常量值存储在JVM内存中的常量区中,在类不加载时即可访问。
但是不能说所有的静态常用访问都不需要类的加载,这里还要判断这个常量是否属于“编译期常量”,即在编译期即可确定常量值。如果常量值必须在运行时才能确定,如常量值是一个随机值,也会引起类的加载,如下:
public static final int FINAL_VAR_INT = new Random(47).nextInt();
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();
相关文章推荐
- Java中常量和静态变量区别
- Java基础(五)---局部变量、全局变量、静态变量、final变量、静态常量、静态方法
- Java中静态变量与实例变量的区别 静态变量活用实现类似session的功能
- Java中常量和静态变量区别详解
- java中的静态变量、静态方法与静态代码块区别
- Java内存图以及堆、栈、常量区、静态区、方法区的区别
- struts2 freemarker当中引进java 常量java静态方法
- 【转】Java类的初始化顺序 (静态变量、静态初始化块、变量
- java 静态方法和静态变量 static
- java面向对象思想之方法的重载、this变量、静态变量、Java中的常量
- c#只读字段和常量的区别,以及静态构造函数的使用
- 区别java的 C++内存分配 知识,全局,局部,静态变量
- 区别java的 C++内存分配 知识,全局,局部,静态变量
- C++中堆和栈的区别,自由存储区、全局/静态存储区和常量存储区
- JAVA 静态变量与静态方法
- java静态页面生成技术--前期测试阶段2
- C++中堆和栈的区别,自由存储区、全局静态存储区和常量存储区
- java中静态变量和静态方法分别有什么特点?
- Java学习:静态方法,静态变量和静态代码块
- java编译静态常量的机制