Father的靜態代碼塊
Son的靜態代碼塊
Father的非靜態代碼塊
Father的構造方法
Son的非靜態代碼塊
Son的構造方法
Father的非靜態代碼塊
Father的構造方法
Son的非靜態代碼塊
Son的構造方法java
靜態方法塊只執行一次函數
靜態方法塊在類加載時被執行,因此,只要類含有main函數,無論是否生成生成相應的對象,靜態代碼塊都會執行this
java規定,在執行構造函數以前必須執行父類的構造函數,直到這個類是java.lang.Object類的構造函數。
然而函數的入口是子類構造函數,所以任何構造函數第一句必須是執行父類構造函數,若是沒有添加super關鍵字,那麼編譯器會爲該構造函數第一句添加一個super()語句(你能夠這麼理解,固然編譯之後並非這樣)。若是有super關鍵字顯示的調用父類構造函數,就是用指定的那個父類構造函數,不然使用默認的無參數構造函數。也有一種狀況例外,就是存在this關鍵字,調用本類其它構造函數,可是按照遞歸調用,最終仍是會調用父類構造函數。
若是你繼承的父類沒有無參數構造函數,那麼你這個類第一句必須顯示的調用super關鍵字來調用父類對應的有參數構造函數,不然不能經過編譯。spa
1 package chap1; 2 3 class Father { 4 5 static { 6 System.out.println("Father的靜態代碼塊"); 7 } 8 9 { 10 System.out.println("Father的非靜態代碼塊"); 11 } 12 13 public Father() { 14 System.out.println("Father的構造方法"); 15 } 16 } 17 public class Son extends Father{ 18 19 static{ 20 System.out.println("Son的靜態代碼塊"); 21 } 22 23 { 24 System.out.println("Son的非靜態代碼塊"); 25 } 26 27 public Son(){ 28 System.out.println("Son的構造方法"); 29 } 30 31 public static void main(String[] args) { 32 Son son = new Son(); 33 Son son2 = new Son(); 34 } 35 }