static{
System.out.println("我輸出的是 子類靜態塊內容→"+TestClass.name);//第四步
}
{
System.out.println("我輸出的是 子類非靜態塊內容→"+this.code);//第十三步
}
static String name = "子類靜態變量";//第五步
String code ="子類非靜態變量初始化";//第十四步
TestClass(){
code = "子類構造方法裏該修了的 code 的值";//第十六步
System.out.println("我輸出的是 子類構造體→"+code);//第十七步
}
static{
System.out.println("我輸出的是 子類靜態塊內容→"+name);//第六步
}
{
System.out.println("我輸出的是 子類非靜態塊內容→"+code);//第十五步
}
/** *//**
* @param args
*/
public static void main(String[] args) {
new TestClass();
}
class BaseClass{
static {
System.out.println("我輸出的是 父類靜態塊內容→"+BaseClass.basename);//第一步,因爲basename先初始化默認值!所以爲null
}
{
System.out.println("我輸出的是 父類非靜態塊內容→"+this.basecode);//第七步,因爲basecode先初始化默認值!所以爲null
}
static String basename = "父類靜態變量"; //第二步
String basecode ="父類非靜態變量初始化";//第八步
BaseClass(){
basecode = "父類構造方法裏該修了的 basecode 的值";//第十一步
System.out.println("我輸出的是 父類構造體→"+basecode);//第十二步
}
static {
System.out.println("我輸出的是 父類靜態塊內容→"+basename);//第三步
}
{
System.out.println("我輸出的是 父類非靜態塊內容→"+basecode);//第九步
}
}
1:父類靜態變量的默認初始化
2.父類靜態變量初始化,父類靜態塊代碼(靜態變量和靜態塊代碼中,哪個在前面就先執行哪個)
3:子類靜態變量的默認初始化
4.子類靜態變量,子類靜態塊代碼(靜態變量和靜態塊代碼中,哪個在前面就先執行哪個)
5:父類非靜態變量的默認初始化
6:父類非靜態變量,父類非靜態塊代碼(非靜態變量和非靜態塊代碼中,哪個在前面就先執行哪個)
7.父類構造體
8.子類非靜態變量的默認初始化
9.子類非靜態變量,子類非靜態塊代碼(非靜態變量和非靜態塊代碼中,哪個在前面就先執行哪個)
10:子類構造體
經常有人問初始化的順序,我在這裏詳細的說明了,看帖一定要回帖哦!