package com.test;
public class Son extends Father{
static{
System.out.println("Son:靜態代碼塊");
}
{
System.out.println("Son:構造代碼塊");
}
public Son(){
System.out.println("Son:構造函數");
}
public Son(String s){
super(s);
System.out.println("Son:構造函數" + s);
}
public static void main(String[] args) {
System.out.println();
Father fa = new Son("Son");
}
}
package com.test;
public class Father {
static{
System.out.println("Father:靜態代碼塊");
}
{
System.out.println("Father:構造代碼塊");
}
public Father(){
System.out.println("Father:構造函數");
}
public Father(String s){
System.out.println("Father:構造函數" + s);
}
}
Son:靜態代碼塊
Father:構造代碼塊
Father:構造函數Son
Son:構造代碼塊
Son:構造函數Son
得出結論:
1、執行順序:靜態代碼塊>構造代碼塊>構造函數。
2、靜態代碼塊隨類的聲明而執行,而構造代碼塊和構造函數在一個類實例化後執行,其中構造代碼塊又優先於構造函數代碼塊。
3、子類沒有用super(s)時,默認調用的是父類的無參構造函數塊。