我是这样分析不知道对不对,new Dog();这个会在堆内存中先找到Dog.class并加载进来,但是在加载之前,方法区内的方法就已经加载了,因为public Dog() 的构造方法中在
i = 222;之前是先调用父类的默认构造方法,在父类默认函数调this.display() 时,this是调用他的类,即dog类的display,所以打印的是dog的i,因为方法区内的要先于对象创建,
所以调用时i还没初始化,如果加static关键字加载到方法区内,就能打印出i的值,不过在这里我也不太确定,因为属性初始化要先于构造函数,有知道的兄弟也发个信息给我,
共同学习一下 |