乙個類的執行流程

2021-09-24 12:26:39 字數 1841 閱讀 5482

心法口訣

1. 建立子類物件時,一定會優先初始化父類; (因為子類有可能使用到父類的成員)

2. 建立子類物件,子類的構造方法中,一定會有乙個構造方法中有super();去呼叫父類的構造方法,對父類進行初始化;

3. 初始化順序:

父類–靜態變數

父類–靜態初始化塊

子類–靜態變數

子類–靜態初始化塊

父類–變數

父類–初始化塊

父類–構造器

子類–變數

子類–初始化塊

子類–構造器

注意事項:

super()呼叫父類的構造方法,只能在子類的構造方法中使用,也只能在第一行;

執行結果:

1.父類的靜態

2.子類靜態

3.c類的靜態

4.c類的構造方法

5.父類的構造方法

6.c類的構造方法

7.子類的構造**塊

8.子類的成員方法

9.子類構造方法

執行步驟: (這裡a類是b類的 父類 c類是單獨的)

先看main函式,main函式是執行入口。 new b 建立b例項化物件,b類繼承了a類 ,b類中有乙個隱藏的super,所以會優先初始化 a類(因為子類有可能使用到父類的成員),按照心法口訣來,首先是a類輸出父類的靜態**塊;其次是b類輸出子類的靜態**塊;再是父類a成員位置的new c() 建立c例項化物件,這時會去先執行c的靜態**塊,然後執行其c的類構造方法;在回到a類繼續向下執行輸出父類的構造方法;父類執行完後輪到子類執行,子類成員位置的new c() 建立c例項化物件,由於靜態**塊只執行一次,所以只執行c的類構造方法;在回到b類繼續向下執行輸出子類的構造**塊,子類構造**塊中呼叫了method方法,所以先執行輸出子類的成員方法,最後就是子類的構造方法

class zi extends fu

public void show()

public static void main(string args)

}class fu

public void show()

}

輸出0的原因是:執行父類的構造方法時,父類的成員變數已經初始化,但是子類還沒有初始化,由於多型的原因,父類構造器的show()方法執行的是子類中的show()方法,相當於this.show(),但是子類中的x還沒顯示初始化,所以值為0,則列印出zi 0,而不是zi 1.

初始化的實際過程:

1.在其他任何事物發生之前,將分配給物件的儲存空間初始化成二進位制的零.

2.如前所述那樣呼叫基類構造器.此時,呼叫覆蓋後的方法(要在子類構造器之前呼叫),由於步驟一的緣故,我們此時發現x的值為0.

3.按照宣告的順序呼叫成員的初始化方法.

4.呼叫匯出類的構造器主題.

乙個執行記時類

using system using system.collections.generic using system.text using system.runtime.interopservices using system.diagnostics.codeanalysis namespace c...

乙個 Spark 應用程式的完整執行流程

2 打 jar 包,通過 spark submit 提交執行 3 sparksubmit 提交執行 6 執行到 action 運算元,這個階段會產生 dag 血緣依賴關係,但是並沒有真正執行 7 執行 action 運算元,生成乙個 job 提交執行 8 dagscheduler 會對提交的 job...

python 之 類(乙個類包含乙個類)

1.知識點 1 乙個類可以作為另乙個類的元素。2 當乙個類的屬性為列表新增另乙個類名時,會預設新增另乙個類的 str self 的返回值 箱子 class box 屬性 def init self,b color,b volumn self.color b color self.volumn b v...