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

一、实例

例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

四、总结

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章