java類的載入以及初始化順序

2021-07-27 23:43:18 字數 1789 閱讀 9216

類的載入和初始化的了解對於我們對程式設計的理解有很大幫助,最近在看類的記載方面的問題。從網上查閱了若干文章,現總結如下:

單獨乙個類的場景下,初始化順序為依次為 靜態資料,繼承的基類的建構函式,成員變數,被呼叫的建構函式。

其中靜態資料只會初始化一次。

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