1. 程式人生 > >父子類的靜態程式碼塊 建構函式

父子類的靜態程式碼塊 建構函式

public class ParentStatic {

	private int x=3;
	private String y ="3";
	public  ParentStatic() {
		System.out.println("這是父類的空參建構函式");
	}
	public ParentStatic(int x,String y) {
		System.out.println("這是父類的有參建構函式"+x+y);
	}
	
	{
		System.out.println("這是父類的非靜態程式碼快");
	}
	static {
		System.out.println("這是父類的靜態程式碼快");
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
       ChildA a = new ChildA();
	}

}
class ChildA extends ParentStatic{
	private int x =6 ;
	private int y =4;
	public ChildA(){
		System.out.println("這是子類的空參建構函式");
	}
	public ChildA(int t,int c) {
	    //這裡預設隱藏了一條語句 super();
		System.out.println("這是子類的有參建構函式:"+t+c);
	}
	{
		System.out.println("這是子類的非靜態程式碼塊");
	}
    static {
    	System.out.println("這是子類的靜態程式碼塊");
    }
}
/*
*這是父類的靜態程式碼快
*這是子類的靜態程式碼塊
*這是父類的非靜態程式碼快
*這是父類的空參建構函式
*這是子類的非靜態程式碼塊
*這是子類的空參建構函式
*/
//當使用有參建構函式例項化物件時的結果
ChildA b = new ChildA(2, 5);
/**
這是父類的靜態程式碼快
這是子類的靜態程式碼塊
這是父類的非靜態程式碼快
這是父類的空參建構函式
這是子類的非靜態程式碼塊
這是子類的有參建構函式:25
**/
//當建立兩個物件時:
       ChildA a = new ChildA();
       ChildA b = new ChildA(2, 5);
/** 結果如下
這是父類的靜態程式碼快
這是子類的靜態程式碼塊
這是父類的非靜態程式碼快
這是父類的空參建構函式
這是子類的非靜態程式碼塊
這是子類的空參建構函式
------------靜態程式碼塊只在第一次new執行一次,之後不再執行,而非靜態程式碼塊在每new一次就執行一次。-------------------------------------------------------------
這是父類的非靜態程式碼快
這是父類的空參建構函式
這是子類的非靜態程式碼塊
這是子類的有參建構函式:25
**/

總結:先父後子,先靜後動,最後執行構造,一個類的靜態程式碼快僅在載入時執行一次…