【学习笔记】创建对象内存分析
Pet类:
package com.oop.demo02;
public class Pet {
public String name;
public int age;
public void shout(){
System.out.println("叫了一声");
}
}
package com.oop;
import com.oop.demo01.Person;
import com.oop.demo02.Pet;
public class Application {
public static void main(String[] args) {
Pet dog = new Pet();
dog.name="二狗";
dog.age = 3;
dog.shout();
}
}
首先程序运行,先将Application 类加载到方法区
然后执行main方法,把main方法压入栈中
main方法第一步首先new了一个Pet类,然后我们把Pet类模板加载到方法区
我们把new 的Pet类赋给 dog 时,在栈里创建了一个引用变量名dog,然后在堆中加载了一个真正的对象,这个对象的shout()方法 是调用的方法区中Pet模板的shout().
至此,Pet dog = new Pet(); 这条语句就执行完了。
然后我们给dog 的name 、 age 赋值,其中“二狗”是从常量池中取得.
这个时候,我们在new 一个新的Pet 名为cat
Pet cat = new Pet();
在栈中会压入引用变量名cat,堆中创建 了一个 新的Pet
引用变量
引用变量在栈中只是一个引用变量名,其真正指向的是堆中的对象
静态方法区
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!