java对象初始化顺序的简单验证
2014-02-05 23:55
381 查看
以下这段小程序对调用对象构造函数时,父类构造函数、成员变量初始化函数,以及非静态初始化块调用顺序进行验证,不考虑静态成员及静态初始化块。
得出结论如下:不考虑静态成员的初始化,调用一个对象的构造函数时,程序先调用父类的构造函数(可以通过super关键字指定父类的构造函数,否则默认调用无参的构造函数,并且需要在子类的构造函数的第一行调用),之后静态成员变量的初始化函数和静态初始化块则按照在代码当中的顺序执行,成员变量如果没有指定值的话则赋予默认值,即基本数据类型为0或false等,对象则为null;最后调用自身构造函数。
public class Derive extends Base { private Member m1 = new Member("Member 1"); { System.out.println("Initial Block()"); } public Derive() { System.out.println("Derive()"); } private Member m2 = new Member("Member 2"); private int i = getInt(); private int getInt() { System.out.println("getInt()"); return 2; } public static void main(String[] args) { new Derive(); } } class Base { public Base() { System.out.println("Base()"); } } class Member { public Member(String m) { System.out.println("Member() "+m); } } /*程序输出: Base() Member() Member 1 Initial Block() Member() Member 2 getInt() Derive() */
得出结论如下:不考虑静态成员的初始化,调用一个对象的构造函数时,程序先调用父类的构造函数(可以通过super关键字指定父类的构造函数,否则默认调用无参的构造函数,并且需要在子类的构造函数的第一行调用),之后静态成员变量的初始化函数和静态初始化块则按照在代码当中的顺序执行,成员变量如果没有指定值的话则赋予默认值,即基本数据类型为0或false等,对象则为null;最后调用自身构造函数。
相关文章推荐
- 通过一个简单类就可以知道java类和对象的初始化顺序
- java对象初始化顺序验证示例
- 简单测试java里一个对象的初始化是按怎样的顺序执行的
- Java类和对象的初始化顺序
- Java对象初始化顺序
- java中在创建对象时候的初始化顺序
- Java初始化顺序的验证(Cannot reference XXX before supertype constructor has been called引发的思考)
- 剖析一个java对象初始化顺序问题
- Java对象初始化顺序
- Java对象初始化顺序
- Java 对象初始化顺序 执行顺序
- Java创建对象的初始化顺序
- java所有对象初始化的执行顺序
- java对象初始化顺序
- java对象的初始化顺序
- java学习笔记4:对象的初始化顺序(官方实例)
- Java中对象初始化顺序
- Java中对象的初始化顺序
- [转]Java中静态代码块及对象的初始化顺序
- java认证:剖析一个java对象初始化顺序问题