4.对象的实例化过程
一、对象实例化过程 Person p = new Person();
- JVM会去读取指定路径下的Person.class文件,并加载进内存,并会先加载Person的父类(如果有直接父类的情况下)
- 在堆内存中开辟空间,分配地址。
- 并在对象空间中,对对象中的属性进行默认初始化
- 调用对应的构造函数,进行初始化
- 在构造函数中,第一行会先调用父类中的构造函数进行初始化(如果没有显式调用父类的构造函数,默认第一行将调用父类无参构造函数:super())
- 父类初始化完毕后,再对子类的属性,进行显示初始化。(在定义类属性时的初始化如:String sex=“boy”?
- 指定构造函数中的初始化
- 初始化完毕后,将堆内存中的地址值赋给引用变量。
文章图片
简单来说:
成员变量默认初始化====》父类构造函数初始化===》成员变量定义时显示初始化====》子类构造函数中的初始化
例:
class Father{
int age;
String name;
public Father(){
}
public Father(int age,String name){
System.out.println("Step1");
this.age=age;
this.name=name;
System.out.println("Step2");
}
}class Son extends Father{
String school;
public Son(){
//super();
//如子类构造函数中没有显式的调用父类的构造函数,
//则编译器默认调用父类无参数的构造函数
}
public Son(int age,String name){
super(age,name);
System.out.println("Step3");
}
public Son(int age,String name,String school){
this(age,name);
//this,super语句必须在构造函数的首部
System.out.println("Step4");
this.school=school;
}
}
【4.对象的实例化过程】注意:
- super(…)和this(…)调用语句不能同时在一个构造器中出现
- super(…)或this(…)调用语句只能作为构造器中的第一句出现
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量