手机类练习与一个对象的内存图
phone
/* 定义一个类,用来模拟手机事务 属性:品牌。价格。颜色 行为:打电话,发短信 对应到类当中 成员变量(属性) String brand// 品牌 double price//价格 String color/颜色 成员方法(行为) public void call(String who){}//打电话 public void sendMessage(){} //群发短信 */ public class phone { //成员变量 String brand; double price; String color; public void call(String who){ System.out.println("给"+who+"打电话"); } public void sendMessage(){ System.out.println("群发短信"); } }
PhoneDemo01
public class PhoneDemo01 { public static void main(String[] args) { //根据phone类,创建一个名为one的对象 //格式:;类名称 对象名 =new 类名称() phone phone = new phone(); System.out.println(phone.brand); System.out.println(phone.color); System.out.println(phone.price); System.out.println("******************"); phone.brand = "苹果"; phone.color = "土豪金"; phone.price =1.3; System.out.println(phone.brand); System.out.println(phone.color); System.out.println(phone.price); System.out.println("******************"); phone.call("秦始皇"); phone.sendMessage(); } }
对象内存图

通过上图,我们可以理解,在栈内存中运行的方法,遵循"先进后出,后进先出"的原则。变量p指向堆内存中
的空间,寻找方法信息,去执行该方法。
但是,这里依然有问题存在。创建多个对象时,如果每个对象内部都保存一份方法信息,这就非常浪费内存
了,因为所有对象的方法信息都是一样的。那么如何解决这个问题呢?请看如下图解。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)