首先卤煮需要搞清楚这个程序的执行顺序:
1.main方法中类A创建一个对象需要调用自己的无参构造函数A()。
2.因为为类A是继承自类B的,所以在类A调用自己的构造函数之前JVM先要执行父类B的无参构造函数B()。
3.在B()中有一个父类方法m(),由于类A中已经复写了m()方法,所以父类的m()方法没有执行,转而直接执行子类A中的m()方法。
4.此时类A的构造函数还没有执行,所以变量i还没有写入内存,需要注意的是变量j定义为了静态,这意味着变量j随着main方法一运行就已经写入了内存中的方法区,所以此时变量j完成了赋值的,而变量i此时还没有,默认为0,所以会出现:5.之后类A的构造函数被调用,变量i此时被初始化为5,所以输出结果为: |