編譯時能夠確定的量和不能夠確定的量對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

四、總結

對於在編譯時能夠確定的靜態變量,在使用時可以不對類初始化;
對於在編譯時不能確定的靜態變量,在使用時需要先對類進行初始化。

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