12. A()
13. {
super(); //调用父类的构造方法,默认调用无参,被省略
14. System.out.println(i);
15. System.out.println(j);
16. }
new A(); 的运行顺序是:
1. 如果有静态代码块:
static { 。。。 }
则先运行静态代码块,如果没有,则跳过该步骤
2. 构造方法:
2-1. super(); 调用父类构造方法: B(){ m(); }
因为子类重写(Override)了 m() 方法,所以B的构造方法会调用重写后的m()方法,
这时候 i 和 j 都还没有被赋值(下一步才会对成员变量赋值),
但 j 是静态变量,静态变量如果没有在静态代码块中被赋值,则会在第一次被调用的时候赋值,
所以 这时候 i=0;j=4
2-2. 成员变量初始化:这时候 i=5
2-3. 运行 A 的构造方法代码:输出 i=5,j=4
所以是 0,4,5,4 |