摘要:先說結論對于具有繼承關系的類,它們的類和對象構造順序為父類的類構造器子類的類構造器父類成員變量的賦值和實例代碼塊父類的構造函數(shù)子類成員變量的賦值和實例代碼塊子類的構造函數(shù)。類實例塊是放在該類構造函數(shù)最前面和父類構造函數(shù)之后執(zhí)行的。
先說結論
對于具有繼承關系的類,它們的類和對象構造順序為:父類的類構造器() -> 子類的類構造器() -> 父類成員變量的賦值和實例代碼塊 -> 父類的構造函數(shù) -> 子類成員變量的賦值和實例代碼塊 -> 子類的構造函數(shù)。
實驗代碼如下:
public class ExtensionTest { public static void main(String[] args) { new SubClass(); } } class SuperClass { { System.out.println("我是父類實例塊"); } static { System.out.println("我是父類類構造塊"); } public SuperClass() { System.out.println("我是父類構造函數(shù)塊"); } } class SubClass extends SuperClass { { System.out.println("我是子類實例塊"); } static { System.out.println("我是子類類構造塊"); } public SubClass() { System.out.println("我是子類構造函數(shù)塊"); } }
結果:
我是父類類構造塊
我是子類類構造塊
我是父類實例塊
我是父類構造函數(shù)塊
我是子類實例塊
我是子類構造函數(shù)塊
解釋:
類構造塊是初始化類的時候執(zhí)行的,而初始化類首先得加載類(不加載類進內(nèi)存當然沒法初始化)。
類實例塊是放在該類構造函數(shù)最前面和父類構造函數(shù)之后執(zhí)行的。因為子類的構造函數(shù)調(diào)用之前,會先調(diào)用父類的構造函數(shù)。
基于上述兩條規(guī)則,我們再來看執(zhí)行順序。
new SubClass()也就是要構造SubClass這個類的一個對象,而要構造這個對象,首先必須把這個類的描述、定義加載進內(nèi)存(類加載)。因此要先加載這個類(不過此時還未初始化)。
加載完這個類之后,想要構造這個類的對象。但是此時這個類的靜態(tài)變量還未被初始化,因此要先初始化這個類,但是初始化這個類需要先初始化它的父類,因此此時就變成了,加載父類->初始化父類(調(diào)用靜態(tài)塊,即類構造塊)
->初始化子類(調(diào)用靜態(tài)塊,即類構造塊)。
然后就可以構造這個類的對象了,構造這個類的對象之前,要先構造父類對象,因此會先調(diào)用父類的構造函數(shù),而調(diào)用父類構造函數(shù)之前又會先調(diào)用父類的實例塊。
然后就到了子類構造函數(shù),然而執(zhí)行之前一樣要先調(diào)用子類的實例塊,最后才是子類的構造函數(shù)的函數(shù)體。
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/73403.html
類 在標題為面向對象的編程概念課程中對面向對象概念的介紹以自行車課為例,以賽車,山地自行車和雙人自行車為子類,下面是可能實現(xiàn)Bicycle類的示例代碼,為你提供類聲明的概述,本課程的后續(xù)部分將逐步備份和解釋類聲明,目前,不要關心細節(jié)。 public class Bicycle { // the Bicycle class has // three fields ...
摘要:看到的只是,而由泛型附加的類型信息對來說是不可見的。然后再加載執(zhí)行類的靜態(tài)變量以及靜態(tài)語句塊。接口中基本數(shù)據(jù)類型為而抽類象不是的。本地方法接口主要是調(diào)用或實現(xiàn)的本地方法及返回結果。用戶自定義類加載器,在程序運行期間,通過的子類動態(tài)加載。 編譯機制 編譯主要是把?.Java文件轉換為 .class 文件。其中轉換后的 .class 文件就包含了元數(shù)據(jù),方法信息等一些信息。比如說元數(shù)據(jù)就...
摘要:對象的引用關鍵字總是指向調(diào)用該方法的對象。根據(jù)出現(xiàn)位置的不同,作為對象的默認引用有兩種情形。構造器中引用該構造器正在初始化的對象。如果同一個類中包含了兩個或兩個以上方法的方法名相同,但形參列表不同,則被稱為方法重載。 類和對象 定義類 面向對象的程序設計過程中有兩個重要概念:類(class)和對象(object,也被稱為實例,instance),其中類是某一批對象的抽象,可以把類理解成...
摘要:根據(jù)出現(xiàn)的位置,作為對象的默認引用有兩種情形構造器中引用該構造器正在初始化的對象。在構造器中代表該構造器正在初始化的對象。用于限定該對象調(diào)用它從父類得到的實例變量和方法。 子類繼承父類就可以繼承到父類的成員變量和方法。如果訪問控制允許,子類實例可以直接調(diào)用父類里定義的方法。 如果多個重載的構造器里包含了相同的初始化代碼,則可以把這些初始化代碼放置在普通代碼塊里完成,初始化塊總在構...
摘要:面向對象面向對象的三種基本特征繼承封裝多態(tài)結構化程序設計簡介主要原則自頂向下逐步求精模塊化。在面向對象方法中,類之間共享屬性和操作的機制稱為繼承。 面向對象 面向對象的三種基本特征:繼承、封裝、多態(tài) 結構化程序設計簡介 主要原則:自頂向下、逐步求精、模塊化。 結構化分析SA方法對系統(tǒng)進行需求分析;結構化設計SD方法對系統(tǒng)進行概要設計、詳細設計;結構化編程SP方法來實現(xiàn)系統(tǒng)。 結構化程序...
閱讀 3938·2023-04-26 00:36
閱讀 2705·2021-11-16 11:44
閱讀 1137·2021-11-15 17:58
閱讀 1701·2021-09-30 09:47
閱讀 1243·2019-08-30 13:05
閱讀 1580·2019-08-30 12:55
閱讀 2447·2019-08-30 11:02
閱讀 2804·2019-08-29 17:01