Java類加載過程后,成員變量的初始化。


Java類的加載和成員變量初始化,創建對象的順序。



class X {
Y b=new Y();
X() {
System.out.println("X");
}
}
class Y {
Y() {
System.out.println("Y");
}
}
public class Z extends X {
Y y=new Y();
Z() {
super();
System.out.println("Z");
}
public static void main(String[] args) {
new Z();
}
}
//YXYTest
以上代碼輸出結果為YXYZ


看以看出,public類加載后並沒有初始化成員變量y。在main方法使用new Z()創建對象時,先去構建class X父類對象,此時父類X的成員變量初始化輸出Y,然后構造方法輸出X,以后再進行class Z中y成員變量初始化輸出Y,緊接着Z()中的輸出語句輸出Z。

網上找來的,可能是最好的解釋了。

-------------------------------------------------------------------------------------------------------

在類被繼承的情況下,初始化的順序:

1.初始化子類,類加載器在加載它的時候會發現它繼承了另外一個類,類加載器要先把父類加載進來。於是開始加載父類,父類的靜態部分被按順序加載。之后子類的靜態部分被加載。這樣的順序是考慮子類的靜態域可能會依賴父類的靜態域;

2.父類的非靜態部分被加載;

3.子類指定的父類的構造器;

4.子類的非靜態部分被加載;

5.子類構造器的其余部分。

------------------------------------------------------------------------------------------------






注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com