一、实例
例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
四、总结
对于在编译时能够确定的静态变量,在使用时可以不对类初始化;
对于在编译时不能确定的静态变量,在使用时需要先对类进行初始化。