创建对象的内存分析

创建对象的内存分析


通过代码来分析

package oop;

public class Pet {
    // 加个属性
    public String name;
    public int age;

    // 无参构造,这个他隐藏了。不写有参的话,不写也没事
    public Pet() {
    }

    // 自己的构造方法是可以写void的
    public void shout(){
        System.out.println("叫了一声");
    }
}
package oop;

public class Application {
    public static void main(String[] args) {
        Pet dog = new Pet();

        dog.age = 3;
        dog.name = "旺财";

        System.out.println(dog.age);
        System.out.println(dog.name);
    }
}

在这里插入图片描述
内存分析
程序的分析:一个程序分为栈和堆,和一个方法区。
程序运行的时候:先把类加载到方法区。

首先java程序的内存一般分3个部分,一个是栈:用来存放局部变量,一个是堆:new出来的对象都存在堆中。一个是方法区:存放.class文件相关。class里面最主要保存的是方法的名称 返回值等参数。

  1. 首先先在方法区加载class文件,即Application.class文件。以及一些常量池的东西:比如旺财 。main方法。
  2. 运行main方法会在栈中运行,叫做进栈。然后运行到new Pet这个Pet类。dog这个引用是运行在栈里面,
  3. 这个Pet类class文件在方法区加载出成员变量name和age。默认值null。0.和成员方法shot。
  4. 而new的类在堆中,在栈中的dog.age和dog.name赋值之后会把地址的值给堆中,所以new同一个对象,但是他们的引用是不一样的
    在这里插入图片描述
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页