Java中繼承與程式碼塊綜合
阿新 • • 發佈:2019-02-20
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建構函式 */