面向对象06:创建对象内存分析

面向对象06:创建对象内存分析

创建对象

创建一个Pet类,实例化两个对象。

package com.oop.demo03;

public class Pet {
    public String name;
    public int age;

    public void shout(){
        System.out.println("叫了一声");
    }
}
package com.oop;

import com.oop.demo03.Pet;

public class Application {
    public static void main(String[] args) {

        Pet dog = new Pet();
        dog.name = "旺财";
        dog.age = 3;
        dog.shout();

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

        Pet cat = new Pet();
    }
}

创建对象内存分析

名词解释

  • 栈:主要用于存储main(),引用变量名等
  • 堆:存储对象
  • 方法区:加载类相关信息
  • 静态方法区:和类一起加载的,可以被对象直接使用

流程图

6.1

流程分析

  1. 程序开始运行时,首先会加载一些关于Application类的模板信息,该Application类里含有
  • main()方法
  • 常量池:旺财
  1. 执行main方法,会遇到Pet类,加载Pet类,内含
  • name

  • age

  • shout()

    此时name,age值都为null

  1. main方法遇到new Pet,创建对象。
  • 栈内存会为dog,cat引用开辟空间。
  • 堆内存会为dog,cat开辟空间,此时堆内存中的dog,cat对象的成员变量被默认初始化。
  • dog对象里的name值调用了常量池的"旺财"字符串,调用了Pet类里的shout()方法,完成自定义初始化。
  • 通过构造方法完成对象初始化完毕。
  • dog引用指向dog对象的内存,cat引用指向cat对象的内存。

总结

  • 在程序运行时,主方法所在的类Application首先在方法区内被加载,主方法里调用了Pet类,于是方法区继续加再出Pet类。
  • 使用new关键字创建dog对象时,Pet类生成了一个名为dog的引用类型,栈内存被开辟了一片空间用于其存储,该引用类型不存储任何东西,只存储一个指向对象的地址。
  • 该引用类型存储指向对象的地址,并且在堆内存中开辟一片空间,即该引用类型在堆内存中加载出一个对象,此时对象的成员方法得到加载,对象的变量如String,int都为默认值,即完成默认初始化。
  • 方法区中Pet中常量池里的值被传给对象,对象完成自定义初始化。
  • cat同理。
posted @ 2025-07-22 14:01  消消小潮乐  阅读(5)  评论(0)    收藏  举报