java对象成员变量初始化顺序

王朝学院·作者佚名  2016-08-27  
宽屏版  字体: 小 | 中 | 大 | 超大  

对象成员变量指非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 1

create 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 1

create obj 1

create obj 2

看来,并非是我想象的那样。不过,这也说的通。 因为毕竟父对象需要随时向子对象提供自己的变量,

super.f1

在初始化子对象的时候,同时初始化父类的成员变量,也保证了随时能向子对象提供变量引用的能力。

以上。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有