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...