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