类与对象的练习-对象内存图
类与对象的练习
定义手机类:
1 public class Phone { 2 // 成员变量 3 String brand; //品牌 4 int price; //价格 5 String color; //颜色 6 // 成员方法 7 //打电话 8 public void call(String name) { 9 System.out.println("给"+name+"打电话"); 10 } 11 //发短信 12 public void sendMessage() { 13 System.out.println("群发短信"); 14 } 15 }
定义测试类:
1 public class Test02Phone { 2 public static void main(String[] args) { 3 //创建对象 4 Phone p = new Phone(); 5 //输出成员变量值 6 System.out.println("品牌:"+p.brand);//null 7 System.out.println("价格:"+p.price);//0 8 System.out.println("颜色:"+p.color);//null 9 System.out.println("‐‐‐‐‐‐‐‐‐‐‐‐"); 10 //给成员变量赋值 11 p.brand = "锤子"; 12 p.price = 2999; 13 p.color = "棕色"; 14 //再次输出成员变量值 15 System.out.println("品牌:"+p.brand);//锤子 16 System.out.println("价格:"+p.price);//2999 17 System.out.println("颜色:"+p.color);//棕色 18 System.out.println("‐‐‐‐‐‐‐‐‐‐‐‐"); 19 //调用成员方法 20 p.call("紫霞"); 21 p.sendMessage(); 22 } 23 }
对象内存图
一个对象,调用一个方法内存图
通过上图,我们可以理解,在栈内存中运行的方法,遵循"先进后出,后进先出"的原则。变量p指向堆内存中 的空间,寻找方法信息,去执行该方法。
但是,这里依然有问题存在。创建多个对象时,如果每个对象内部都保存一份方法信息,这就非常浪费内存 了,因为所有对象的方法信息都是一样的。那么如何解决这个问题呢?请看如下图解。
两个对象,调用同一方法内存图
对象调用方法时,根据对象中方法标记(地址值),去类中寻找方法信息。这样哪怕是多个对象,方法信息 只保存一份,节约内存空间。
一个引用,作为参数传递到方法中内存图
引用类型作为参数,传递的是地址值。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本