靜態區塊格式:
static
{
}
} #
靜態區塊在類別載入的時候執行,又因為載入子類別時,會預先載入父類,因此父類別中如果有靜態區塊,則最先執行。然後立即執行子類別的靜態區塊。
如果一個類別中有多個靜態區塊,則依照編碼的先後順序執行。
註:由於類別只會載入一次,因此每個靜態區塊只會執行一次。
自由方塊格式:
{
}
}
# 自由塊在類別被實例化時執行。
如果要實例化一個子類,那麼他的建構子會先實例化其父類別。因此父類別的自由塊會先被執行,然後開始建構父類別。父類別的建構器執行完畢後,操作權傳回給子類別的建構器,此時開始執行子類別的自由區塊。
然後開始建構子類別。
-
以下為融合了父類別靜態區塊、子類別靜態區塊,父類別自由區塊、子類別自由區塊,父類別建構函數、子類別建構函數,this關鍵字、super關鍵字的例子,感覺很值得分析,值得記錄。
-
[java]
view
##
plaincopy
-
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
## private static Father father; //子類別中包含參構造器(含參構造函數) # public Son(Father father){ this(); # father.first(8)
father.first(8));
- }
- //子類別中無參考建構子(無參考建構子)
- public Son(){
# this.punk(6);
} public void first(int i){ sum=sum i ; # sum=sum i ; ##> System.out.println(sum); -
## }
-
//子類別中的靜態區塊
-
static{
-
Father f=new Son();
-
f.first(4);
-
## f.first(4);#1
# } ############ int punk(int sum){ ############ ##### return sum; ############ } ############ //子類別中的自由區塊############# //子類別中的自由區塊########### ### { ############ System.out.println("曾經滄海難為水,除卻巫山不是雲"); ########## ######### public static void main(String argsp[]){ ###################
Son son=new Son(new Son());
}
##
##}
- [java]
view
plaincopy
//輸出結果為:
-
2010新年快樂
-
菩提本無樹,明鏡亦非台,本來無一物,何處惹塵埃
-
美好的一天
-
## 美好的一天
-
曾經滄海難為水,除卻巫山不是雲
-
4
-
菩提本無樹,明鏡亦非,原本無一物,何處惹塵埃
-
美好的一天
# 美好的一天
# 美好的一天 ###################### 為水,除卻巫山不是雲 ############# 為水,除卻巫山不是雲 ###### ####### 菩提本無樹,明鏡亦非台,本來無一物,何處惹塵埃 ############ 美好的一天 ################ 美好的一天 #################」 ### 曾經滄海難為水,除卻巫山不是雲 ############ 8##########
以上是Java靜態區塊、自由區塊及建構函數的執行順序是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!