類的載入和初始化的了解對於我們對程式設計的理解有很大幫助,最近在看類的記載方面的問題。從網上查閱了若干文章,現總結如下:
單獨乙個類的場景下,初始化順序為依次為 靜態資料,繼承的基類的建構函式,成員變數,被呼叫的建構函式。
其中靜態資料只會初始化一次。
public static void main(string args)
}class son
public son(int age)
private height height = new height(1.8f);
public static gender gender = new gender(true);
}class height
}class gender else
}}輸出:
稍微修改一下**,新增兩個基類,讓son繼承father, father繼承grandpa。
繼承的情況就比較複雜了。由於繼承了基類,還將往上回溯,遞迴地呼叫基類的無參構造方法。
在我們的例子中,在初始化靜態資料後,會先往上追溯,呼叫father的預設構造方法,此時再往上追溯到grandpa的預設構造方法。
注:如果在子類的構造方法中,顯式地呼叫了父類的帶參構造方法,那麼jvm將呼叫指定的構造方法而非預設構造方法。
我們繼續修改**,讓其最終呈現如下:
public static void main(string args)
}class grandpa
public grandpa(int age)
private height height = new height(1.5f);
public static gender gender = new gender(true, "grandpa");
}class father extends grandpa
public father(int age)
private height height = new height(1.6f);
public static gender gender = new gender(true, "father");
}class son extends father
public son(int age)
private height height = new height(1.8f);
public static gender gender = new gender(true, "son");
}class height
}class gender else
}public gender(boolean ismale, string identify) else
}} 最後輸出會是什麼呢?
在我們的示例中,載入順序應該是這樣的:
grandpa 靜態資料
father 靜態資料
son 靜態資料
grandpa 成員變數
grandpa 構造方法
father 成員變數
father 構造方法
son 成員變數
son 構造方法
所以輸出如下:
java類的載入以及初始化順序
類的載入和初始化的了解對於我們對程式設計的理解有很大幫助,最近在看類的記載方面的問題。從網上查閱了若干文章,現總結如下 我們通過一段 來了解類載入和初始化的順序 package com.classloader.demo class insect private int p print insect....
java類的載入以及初始化順序
類的載入和初始化的了解對於我們對程式設計的理解有很大幫助,最近在看類的記載方面的問題。從網上查閱了若干文章,現總結如下 我們通過一段 來了解類載入和初始化的順序 package com.classloader.demo class insect private int p print insect....
java類的載入以及初始化順序
類的載入和初始化的了解對於我們對程式設計的理解有很大幫助,最近在看類的記載方面的問題。從網上查閱了若干文章,現總結如下 我們通過一段 來了解類載入和初始化的順序 package com.classloader.demo class insect private int p print insect....