Java的塊,靜態塊,構造函數,繼承的執行先後順序

public class Test 

public static void main(String []agrs) 

Son son = new Son(); 



class Super 

public Super() 

System.out.print("A\t"); 


System.out.print("B\t"); 

static 

System.out.print("C\t"); 



class Son extends Super 

public Son() 

System.out.print("D\t"); 


System.out.print("E\t"); 

static 

System.out.print("F\t"); 







靜態的東西是屬於類的,非靜態的東西是屬於實例的。 

靜態的先執行,然後纔是非靜態的。 

在上例中,還要考慮繼承的問題。 

首先是父類靜態 --> C 

然後是子類靜態 --> F 

非靜態區塊可以看作是構造函數中執行完父類構造函數後的第一部分。(構造函數第一行有一個默認的super()調用,就是調用父類構造函數)。 

這個時候執行父類構造函數: 

父類非靜態區塊 --> B 

父類構造函數塊 --> A 

然後是子類構造函數: 

子類非靜態區塊 --> E 

子類構造函數塊 --> D 

總結一下就是: 

C F B A E D 

值得注意的是,靜態的東西只會執行一次,就是在類加載的時候。 

如果我們在上例中修改main函數爲: 


Java code 

public static void main(String[] agrs) { Son son = new Son(); Son son2 = new Son();} 



這個時候的執行結果爲: 

C F B A E D B A E D 

可以看到第二次創建Son實例的時候,靜態的東西不會再次執行。

引用原址:http://d-y-zh.iteye.com/blog/607027

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