4.对象的实例化过程

一、对象实例化过程

Person p = new Person();
  1. JVM会去读取指定路径下的Person.class文件,并加载进内存,并会先加载Person的父类(如果有直接父类的情况下)
  2. 在堆内存中开辟空间,分配地址
  3. 并在对象空间中,对对象中的属性进行默认初始化
  4. 调用对应的构造函数,进行初始化
  5. 在构造函数中,第一行会先调用父类中的构造函数进行初始化(如果没有显式调用父类的构造函数,默认第一行将调用父类无参构造函数:super())
  6. 父类初始化完毕后,再对子类的属性,进行显示初始化。(在定义类属性时的初始化如:String sex=“boy”?
  7. 指定构造函数中的初始化
  8. 初始化完毕后,将堆内存中的地址值赋给引用变量。

流程图:
对象实例化流程图
简单来说:
成员变量默认初始化====》父类构造函数初始化===》成员变量定义时显示初始化====》子类构造函数中的初始化

例:

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;
 }
}

注意:

  • super(…)和this(…)调用语句不能同时在一个构造器中出现
  • super(…)或this(…)调用语句只能作为构造器中的第一句出现

猜你喜欢

转载自blog.csdn.net/xiaojingfirst/article/details/90292152