javaSE学习(2):理解一个对象的初始化过程(显示初始化,默认初始化,

/*
以手机类为例,来理解一个内存的分配空间
*/
class Phone{
   String brand;
   int price;
   String color;

   public void call(String name){..}
   public void playGame(){...}

}

class PhoneDemo{
    public static void main(){
      Phone p= new Phone();
      p.brand="一加7";
      p.price=2999;
      p.color="红色";
    
      p.call("虎哥");
      p.playGame();
   }

 }

}

javaSE学习(2):理解一个对象的初始化过程(显示初始化,默认初始化,_第1张图片

1.首先加载.两个class文件进入方法区,如图。

2.main方法入栈,然后执行语句Phone p=new Phone();

3.new对象创建之前,首先会去方法区找是否有对应的class文件,有,然后把class文件的成员变量拿到新创建的对象中。而方法不用拿,调用时,只需取出来用即可。

4.然后把成员变量赋值,

5.调用方法,通过地址调用去方法区找,调用的方法入栈

6.方法调用完毕,则从内存中消失,整个做完,最后main方法出栈,

 

问题:Phone p=new Phone();在程序中做了什么呢?

    1. 加载Phone.class文件进内存
    2. 在栈内存为p开辟空间
    3. 在堆内存为手机对象开辟空间
    4. 对手机对象的成员变量进行默认初始化
    5. 对手机对象的成员变量进行显示初始化
    6. 通过构造方法对手机对象的成员变量赋值
    7. 手机对象初始化完毕,把对象地址赋值给s变量

 

什么是默认初始化和显示初始化?

答:默认初始化是系统在堆内存创建一个新的对象时,进行的默认初始化,如null 和0

显示初始化是在类定义时,直接在各个成员变量的定义时,优先进行赋值,这叫显示初始化。

你可能感兴趣的:(javaSE学习)