對象成員變量指非static的變量,static的變量一般稱為類成員變量,它們伴隨著類的加載而初始化。
package com.juneny.foundation;public class InitSeqOfObj { ForSeqOfObjTest f1 = new ForSeqOfObjTest("create obj 1"); ForSeqOfObjTest f2 = new ForSeqOfObjTest("create obj 2"); public static void main(String[] args) { InitSeqOfObj i = new InitSeqOfObj(); }}class ForSeqOfObjTest { public ForSeqOfObjTest(String msg) { System.out.PRintln(msg); }}運行,輸出信息如下:
create obj 1create obj 2和定義的順序保持一致。
總結
java 對象的成員變量的初始化順序和定義的順序一致。java 類成員的初始化順序也遵循這個原則,先定義的先初始化,非常符合人的認知習慣。
以上只是獨立的對象,如果有父類呢? 我大膽猜測一下,由于繼承關系只是繼承父類的接口,即方法,所以,當子類實例化時,父類的對象成員變量不會被初始化。
還是做個實驗吧:
package com.juneny.foundation;class parentOfInitSeqOfObj{ ForSeqOfObjTest f1 = new ForSeqOfObjTest("Parent create obj 1");}public class InitSeqOfObj extends parentOfInitSeqOfObj{ ForSeqOfObjTest f1 = new ForSeqOfObjTest("create obj 1"); ForSeqOfObjTest f2 = new ForSeqOfObjTest("create obj 2"); public static void main(String[] args) { InitSeqOfObj i = new InitSeqOfObj(); }}class ForSeqOfObjTest { public ForSeqOfObjTest(String msg) { System.out.println(msg); }}結果讓我大跌眼鏡:
Parent create obj 1create obj 1create obj 2看來,并非是我想象的那樣。不過,這也說的通。 因為畢竟父對象需要隨時向子對象提供自己的變量,
super.f1在初始化子對象的時候,同時初始化父類的成員變量,也保證了隨時能向子對象提供變量引用的能力。
以上。
新聞熱點
疑難解答