现在的位置: 首页 > 综合 > 正文

java构造函数的执行顺序

2018年05月16日 ⁄ 综合 ⁄ 共 778字 ⁄ 字号 评论关闭

昨天在改一处代码时发现执行的过程和预想的不一样,仔细探究才发现是构造器执行顺序问题.(汗自己一下,基础不够扎实)
特地做了一些尝试然后把java构造器的执行顺序整理出来.
首先是我测试的代码:

public class Son extends Father {
    SonProp r = new SonProp();
    public Son() {
        System.out.println("Son is construct");
    }
    public static void main(String[] args) {
        new Son();
    }
}
class Father {
    FatherProp SonProp = new FatherProp();
    public Father() {
        System.out.println("Father is construct");
    }
}
class SonProp {
    public SonProp() {
        System.out.println("SonProp is construct");
    }
}
class FatherProp {
    public FatherProp() {
        System.out.println("FatherProp is construct");
    }
}

 

执行结果如下:
FatherProp is construct
Father is construct
SonProp is construct
Son is construct

由此不难看出java类初始化时构造函数调用顺序:
  (1)初始化对象的存储空间为零或null值;
  (2)按顺序分别调用父类成员变量和实例成员变量的初始化表达式;
  (3)调用父类构造函数;(如果实用super()方法指定具体的某个父类构造函数则使用指定的那个父类构造函数)
  (4)按顺序分别调用类成员变量和实例成员变量的初始化表达式;
  (5)调用类本身构造函数。

抱歉!评论已关闭.