关于Java变量初始化顺序问题实践
2014-06-10 23:51
423 查看
逛逛论坛,看到里面讨论Java类变量初始化顺序问题,然后自己也想了一下,发现与讨论有点出入,怀疑记忆出了问题,然后马上上机验证,得出一下结论:
Java类变量初始化顺序为:父类静态成员初始化——>父类静态块初始化——>子类静态成员初始化——>子类静态块初始化——>父类成员变量初始化——>父类代码块初始化——>父类构造方法——>子类成员变量初始化——>子类代码块初始化——>子类构造方法。
1、测试类:Test
2、Father类:
3、Son类:
4、场景类
运行结果:
很显然上面说的运行结果是正确的。
Java类变量初始化顺序为:父类静态成员初始化——>父类静态块初始化——>子类静态成员初始化——>子类静态块初始化——>父类成员变量初始化——>父类代码块初始化——>父类构造方法——>子类成员变量初始化——>子类代码块初始化——>子类构造方法。
1、测试类:Test
public class Test { public Test(String string) { System.out.println(string); } }
2、Father类:
public class Father { static Test father = new Test("父类静态成员初始化"); Test father2 = new Test("父类成员变量初始化"); static { System.out.println("父类静态块初始化"); } { System.out.println("父类代码块代码块"); } public Father() { System.out.println("父类构造方法"); } public Father(String string) { System.out.println(string); } }
3、Son类:
public class Son extends Father { static Test son = new Test("子类静态成员初始化"); Test son2 = new Test("子类成员变量初始化"); static { System.out.println("子类静态块初始化"); } { System.out.println("子类代码块代码块"); } public Son() { System.out.println("子类构造方法"); } public Son(String string) { System.out.println(string); } }
4、场景类
public class TestMain { public static void main(String[] args) { new Son(); } }
运行结果:
很显然上面说的运行结果是正确的。
相关文章推荐
- 关于java中变量的初始化的问题
- 关于java的初始化顺序的问题
- 关于Java中变量初始化问题
- 关于JAVA中变量的初始化及类属性的默认值问题
- 关于JAVA中变量的初始化及类属性的默认值问题
- 关于java变量的初始化问题
- 在Java中关于静态变量和全局变量什么时候初始化的问题
- 关于C++中类的初始化列表中初始化变量顺序问题
- 关于JAVA中变量的初始化及类属性的默认值问题
- 关于c++的类中成员变量初始化问题+初始化列表中对应顺序问题!
- 关于Java中初始化顺序的问题
- 关于java文件加载和初始化顺序问题分析
- Java中变量的初始化顺序
- java初学碰到的两个问题:win xp下环境变量设置细节 和 变量的初始化问题
- non-local static 变量初始化顺序不确定,带来的问题
- 【转】Java类的初始化顺序 (静态变量、静态初始化块、变量
- 【转】Java类的初始化顺序 (静态变量、静态初始化块、变量、初始化块、构造器)
- java变量,初始化快,构造函数的执行顺序
- 剖析一个java对象初始化顺序问题
- 关于struct 变量初始化和赋值的问题(vs 环境)