类与对象的练习-对象内存图

 类与对象的练习

定义手机类:

复制代码
 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指向堆内存中 的空间,寻找方法信息,去执行该方法。

但是,这里依然有问题存在。创建多个对象时,如果每个对象内部都保存一份方法信息,这就非常浪费内存 了,因为所有对象的方法信息都是一样的。那么如何解决这个问题呢?请看如下图解。

两个对象,调用同一方法内存图

 

 对象调用方法时,根据对象中方法标记(地址值),去类中寻找方法信息。这样哪怕是多个对象,方法信息 只保存一份,节约内存空间。

一个引用,作为参数传递到方法中内存图

 

 引用类型作为参数,传递的是地址值。

posted @   ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示