以下是结合狂神说Java教程和自己的理解得出的关于面向对象内存分析的一些心得体会
附上示例图与代码展示
首先看代码:
创建了一个Pet的类,定义了常量name和age,以及构造方法shout。
然后再新建一个Application的类,在里面new一个Pet的对象“dog”,实际上new一个对象是在调用构造器,给这个dog构造器里面的属性name和age进行赋值并调用shout方法。然后进行输出,在这个过程中,我们新建的类、对象以及赋值的数据信息在内存空间是怎么存放的呢?
接下来看示意图
首先我们创建的对象、类(属性+方法)都是以堆栈的形式存在的。
在上述代码中我们建立了一个新的Java类Application和Pet类,新建的类都会放在堆的方法区中,给属性赋值的数据都是存放在堆中的。
而类中的main主函数的数据被压入栈中,我们new出的对象也是放在栈中的,而栈与堆之前是用地址去关联在一起的,对象根据地址信息可以获取到内存空间中的数据信息。