/**
* 子类对象的实例化过程,6步:
* 1.分配成员变量的存储空间并进行默认的初始化,就是用new关键字产生对象后,对类中的成员变量进行初始化赋值。
* 成员初始化顺序:静态成员-->代码块-->非static成员
* 2.绑定构造方法参数,就是将构造方法所传递进来的实参赋值给构造方法中的形参变量
* 3.如有this语句调用,则调用相应的重载构造方法,回到步骤2开始执行,被调用方法执行完毕后,回到当前构造方法,
* 当前构造方法则直接跳转到步骤6执行
* 4.显式或隐式追溯调用父类的构造方法(一直到Object类为止),父类的构造方法又从步骤2开始对父类执行这些
* 流程,父类的构造方法执行完毕后,回到当前构造方法继续往下执行。
* 5.进行实例变量的显示初始化操作,也即是执行在定义成员变量时就对其赋值的语句。
* 6.执行当前构造方法中的方法体中的程序代码
*/
按照以上初始化步骤,你就可以理解为什么输出结果是03040了,当你在实例化子类时,第一步对子类中的变量默认初始化,然后没有参数列表,所以跳过第2步,进行隐式默认的super()父类初始化,父类中此时变量都是默认初始化,打印为0,回到子类中继续执行,对子类变量进行显示初始化,此时为30,然后开始执行方法体,打印为30,再将40赋值给j。回到main函数继续执行,打印出现在的J值为40,所以最后结果为03040 |