编译时能够确定的量和不能够确定的量对java类初始化的区别

来源:互联网 发布:java开发工作不想做了 编辑:程序博客网 时间:2024/04/27 20:08

一、实例

例1

package yy;class FinalA{public static final int a = 6/2;//该值在编译期间能够确定//定义一个静态代码块,用于测试该类是否被初始化static{System.out.println("inintalized FinalA");}}public class Test1 {public static void main(String[] args) {System.out.println(FinalA.a);}}

运行结果:


例2

package yy;import java.util.Random;class FinalB{public static final int a = new Random().nextInt(100);//该值在编译期间不能够确定//定义一个静态代码块,用于测试该类是否被初始化static{System.out.println("inintalized FinalB");}}public class Test2 {public static void main(String[] args) {System.out.println(FinalB.a);}}

运行结果:



三、分析

由程序结果可知,实例1中的FinalA并未初始化,FinalB进行了初始化。原因在于,当在main方法中调用FinalA或FinalB的静态变量时,FinalA中的变量a在编译时是已知的,而FinalB中的变量在编译时是未知的。所以,要使用变量a,Test2必须先初始化FinalB

四、总结

对于在编译时能够确定的静态变量,在使用时可以不对类初始化;
对于在编译时不能确定的静态变量,在使用时需要先对类进行初始化。

0 0
原创粉丝点击