靜態塊格式:
static
{
}
靜態塊在類被加載的時候執行,又因爲加載子類時,會預先加載父類,因此父類中如果有靜態塊,則最先執行。然後立即執行子類的靜態塊。
如果一個類中有多個靜態塊,則按照編碼的先後順序執行。
注:由於類只會被加載一次,因此每個靜態塊便只會執行一次。
自由塊格式:
{
}
自由塊在類被實例化時執行。
如果要實例化一個子類,那麼他的構造函數會先實例化其父類。因此父類的自由塊會先被執行,然後開始構造父類。父類的構造器執行完畢後,操作權返回給子類的構造器,此時開始執行子類的自由塊。
然後開始構造子類。
以下爲融合了父類靜態塊、子類靜態塊,父類自由塊、子類自由塊,父類構造函數、子類構造函數,this關鍵字、super關鍵字的一個例子,感覺很值得分析,值得記錄。
package com.lsky.test;
public class Father {
private int sum;
//父類中的靜態塊
static{
System.out.println("2010年新年快樂");
}
public void first(int i){
sum=++i+sum++-1+i--;
System.out.println(sum);
}
//父類無參構造器
public Father(){
System.out.println("美好的一天");
}
//含參數構造器
public Father(String s){
System.out.println("我們是學生");
}
//父類中的自由塊
{
System.out.println("菩提本無樹,明鏡亦非臺,本來無一物,何處惹塵埃");
}
}
package com.lsky.test;
public class Son extends Father {
private int sum;
private static Father father;
//子類中含參構造器(含參構造函數)
public Son(Father father){
this();
father.first(8);
}
//子類中無參構造器(無參構造函數)
public Son(){
this.punk(6);
}
public void first(int i){
sum=sum+i++;
System.out.println(sum);
}
//子類中的靜態塊
static{
Father f=new Son();
f.first(4);
}
int punk(int sum){
sum=sum;
return sum;
}
//子類中的自由塊
{
System.out.println("曾經滄海難爲水,除卻巫山不是雲");
}
public static void main(String argsp[]){
Son son=new Son(new Son());
}
}
//輸出結果爲:
2010年新年快樂
菩提本無樹,明鏡亦非臺,本來無一物,何處惹塵埃
美好的一天
曾經滄海難爲水,除卻巫山不是雲
4
菩提本無樹,明鏡亦非臺,本來無一物,何處惹塵埃
美好的一天
曾經滄海難爲水,除卻巫山不是雲
菩提本無樹,明鏡亦非臺,本來無一物,何處惹塵埃
美好的一天
曾經滄海難爲水,除卻巫山不是雲
8