1. 程式人生 > >Java中繼承與程式碼塊綜合

Java中繼承與程式碼塊綜合

1、繼承是面向物件的三大特性(封裝、繼承和多型)之一。繼承就是讓類與類產生像兒子與父親一樣的關係。

2、程式碼塊。在Java中,使用{}括起來的程式碼被稱為程式碼塊。根據其位置和宣告的不同,可以分為區域性程式碼塊,構造程式碼塊,靜態程式碼塊,同步程式碼塊(多執行緒中)。

a、區域性程式碼塊 
在方法中出現,限定變數生命週期,及早釋放,提高記憶體利用率;

b、構造程式碼塊 (初始化塊)
在類中方法外出現,多個構造方法方法中相同的程式碼存放到一起,每次呼叫構造都執行,並且在構造方法前執行;

c、靜態程式碼塊 
在類中方法外出現,並加上static修飾(隨著類的載入而載入);用於給類進行初始化,在載入的時候就執行,並且只執行一次(一般用於載入驅動);

d、同步程式碼塊

Java對於多執行緒的安全問題提供了專業的解決方式(synchronized關鍵字)。

3、本篇只講繼承中使用程式碼塊部分

/*
執行結果??
規則:
1、靜態程式碼塊隨著類的載入而載入
2、構造程式碼塊在每次建立物件前載入執行
3、子類在其建構函式中實現對父類(建構函式)的初始化
4、先有父後有子(在執行時,父類先載入進記憶體,子類才能載入)

於是我的預期結果是:
Father靜態程式碼		--父類載入,父類靜態程式碼塊也載入
Son靜態程式碼塊		--子類載入,子類靜態程式碼塊載入
Son構造程式碼塊		--主函式中(用子類構造方法)建立子類物件,所以子類構造程式碼塊執行
Father構造程式碼		--由於子類構造方法中隱含著super()初始化父類構造方法,所以父類構造程式碼塊執行
Father建構函式		--初始化父類()構造方法
Son建構函式			--最後成功建立子類物件(子類構造方法執行)

那麼預想結果對不對呢???
*/

class ExtendsAndCode {
	public static void main(String[] args) {
		Son son = new Son();
	}
}

class Father {
	/*
	*父類的靜態程式碼塊
	*/
	static {
		System.out.println("Father靜態程式碼塊");
	}

	/*
	*父類的構造程式碼塊
	*/
	{
		System.out.println("Father構造程式碼塊");
	}

	/*
	*父類的建構函式
	*/
	public Father(){
		System.out.println("Father建構函式");
	}
}

class Son extends Father {
	/*
	*子類的靜態程式碼塊
	*/
	static {
		System.out.println("Son靜態程式碼塊");
	}

	/*
	*子類的構造程式碼塊
	*/
	{
		System.out.println("Son構造程式碼塊");
	}

	/*
	*子類的建構函式
	*/
	public Son(){
		//super();//其實這裡隱藏著super(),目的是初始化父類的建構函式
		System.out.println("Son建構函式");
	}
}

/*
正確的執行結果是:

Father靜態程式碼塊
Son靜態程式碼塊
Father構造程式碼塊
Father建構函式
Son構造程式碼塊		--在父類完成初始化後才開始執行子類的構造程式碼塊
Son建構函式
*/
作為筆記,這裡只做簡單介紹!