Student stu=new Student();这一语句发生后的一系列的动作步骤。一块来探讨 ,由于student类是继承自一个person的子类,不过我省掉了。
实例化一个子类对象,由于子类继承自父类,会先实例化父类对象,实例化父类对象,先将父类字节码文件装载进内存的方法区,
开辟内存空间,分配内存空间给父类的静态成员变量和静态方法,
1.静态变量默认初始化,
2父类.静态变量显式初始化,
3父类.静态代码块对其显式初始化(因为静态是随着类的记载而加载的)
然后是子类的字节码文件进入内存方法区,分配内存
4.子类静态变量的默认初始化,
5.子类静态变量的显示初始化,
6子类.静态代码块的显式初始化,
7.栈内存开辟内存空间给引用型变量stu
堆内存给父类开辟内存空间,
8.父类成员变量的默认初始化,
9.父类成员变量的显式初始化,
10.父类构造代码块,
11.父类的构造函数,
堆内存给子类对象开辟内存空间,
12.成员变量默认初始化,
13.子类显式初始化,
14。子类的构造代码块,
15.子类的构造方法,
将子类的堆内存地址赋值给引用
这是老师说的结合我自己的验证得来的,大家可以自己验证一下。这是我理解的方式,不知道对不对,欢迎大家指正!!!
堆内存给子类对象开辟内存空间,成员变量默认初始化,显式初始化,子类的构造代码块,子类的构造方法,将子类的堆内存地址赋值给引用。
|