所有類的變量不論是在類的什么位置,他的初始化都會在任何函數(shù)執(zhí)行前包括構造函數(shù)完成,如果沒有被初始化賦值,會得到默認值,如果在構造函數(shù)中再次被賦值,他將變更原來的初值。
所以一個程序中最先執(zhí)行的是他的類成員變量的初始化。所以要注意這個問題。static成員變量也會給與默認初始值,但不同的是:通常每生成一個類的對象,他的類范圍變量都要初始化一次,但static變量只在第一個對象產(chǎn)生的時候初始化,以后同樣類的對象在產(chǎn)生,他不會被初始化。即使非static變量在Static 變量前聲明,Static 優(yōu)先級高,會被先初始化。
Thinking in Java 的160頁下方的Dog事例閱讀。
1.找到classpath所指定的路徑,裝載class文件
2.所有static成員初始化動作都會被執(zhí)行,此操作只會發(fā)生一次,首次對象被封裝的時候。
3.當new Class,在heap上分配空間。
4.執(zhí)行初始化動作。
5.執(zhí)行構造函數(shù)。
6.需要注意的是如果有繼承關系的話,先初始化超類的變量和構造函數(shù),然后是子類的。