6 類的載入順序

2021-09-25 12:49:15 字數 685 閱讀 1963

1)父類靜態**(包括靜態初始化塊,靜態屬性但不包括靜態方法)

2)子類靜態**塊(包括靜態初始化塊,靜態屬性,但不包括靜態方法)

3)父類非靜態**塊(包括非靜態初始化塊,非靜態屬性)

4)父類建構函式

5)子類非靜態**塊(包括非靜態初始化塊,非靜態屬性)

6)子類建構函式

其中:類中靜態塊按照宣告順序執行,並且(1)和(2)不需要呼叫new類例項的時候就執行了

public class base 

public void callname()

static class sub extends base

}public static void main(string args)

}

結果:null

需要理解子類覆蓋父類方法的問題,也就是方法重寫實現多型問題,base b=new sub();它為多型的一種表現形式,宣告是base,實現是sub類,理解為b編譯時表現為base類特性

,執行時表現為sub類特性.

當子類覆蓋父類的方法後,父類的方法已經被重寫,題中父類初始化呼叫的方法為子類實現的方法,子類實現的方法中呼叫的basename為子類的 私有屬性,此時只執行到步驟4,子類非靜態**塊和初始化步驟還沒有到,子類中的basename還有沒被初始化,所以此時basename為空,所以為null

類的載入順序

直接上 熱乎的 package test 有父類的情況 1.載入父類 1.1 為靜態屬性分配儲存空間並賦初始值 1.2 執行靜態初始化塊和靜態初始化語句 從上至下 2.載入子類 2.1 為靜態屬性分配儲存空間 2.2 執行靜態初始化塊和靜態初始化語句 從上至下 3.載入父類構造器 3.1 為例項屬性...

類的載入順序

類載入的順序 1.載入靜態成員 塊 先遞迴地載入父類的靜態成員 塊 object的最先 再依次載入到本類的靜態成員。同乙個類裡的靜態成員 塊,按寫 的順序載入 靜態 塊和靜態成員誰在前面就先載入誰 如果其間呼叫靜態方法,則呼叫時會先執行靜態方法,再繼續載入。同乙個類裡呼叫靜態方法時,可以不理會寫 的...

類的載入順序

初始化過程 1.初始化父類中的靜態成員變數和靜態 塊 2.初始化子類中的靜態成員變數和靜態 塊 3.初始化父類的普通成員變數和 塊,再執行父類的構造方法 4.初始化子類的普通成員變數和 塊,再執行子類的構造方法 class x class y public class zextends x publ...