Java static屬性和靜態代碼塊和構造方法等的執行順序探討

Java在它開始運行之前並非被完全加載,其各個部分僅在必需時才加載。

import java.awt.Color;


import smallbird.Tools;


public class Parent {

public static final String RG_CODE="025";

public static String CITY_NAME="南京";

public static Color COLOR_RED=new Color(255,0,0); 

public static final Object obj=new Child();

static {
System.out.println("static code block."+Tools.getNowDate());
}


public Parent() {
System.out.println("Parent's Constructor."+Tools.getNowDate());
}

public void speak() {
System.out.println("Parent's speak.");
}
}


1、建議將一些常量聲明爲final static編譯期常量。


若僅聲明爲static,打印Parent.CITY_NAME時會先執行靜態代碼塊,而打印Parent.RG_CODE卻不會。

public static final Color COLOR_RED=new Color(255,0,0); 引用類似這些非常數靜態域時會執行static代碼塊,

2、使用.class來獲得對類的引用不會初始化


3、先初始化靜態屬性,再執行靜態代碼塊

System.out.println("test: "+new Parent());

執行結果:

Parent's Constructor.2015-06-29 22:06:55,577
Child's Constructor.
static code block.2015-06-29 22:06:55,578
Parent's Constructor.2015-06-29 22:06:55,578
test: basic.Parent@ae94e92

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