学习笔记--面向对象与封装(三)一个对象的内存图

我们新建一个手机Phone类,当我们实例化一个手机类并调用其中的成员变量和成员方法的时候,其内存图如下所示
在这里插入图片描述
首先,程序运行的时候,首先加载的是方法区。会加载class文件,类当中的方法和成员变量保存在方法区,然后找到main方法,然后进栈执行main方法。首先执行第一行
Phone one = new Phone();
one 变量是一个引用变量,保存的是new phone()的地址值。
new出来的东西全部保存在堆中。其中成员方法也是引用变量,保存的是在方法区的地址值。
当main方法执行到one.call()这一行时,call方法压栈,程序执行call方法,call执行完从栈中弹出,继续执行main方法的one.sendMessage()

当我们再创建一个对象时 Phone two = new Phone();
在堆内存中会开辟一个独立的空间用于存储这个Phone的属性和方法,由于方法是引用传递,所以不管new多少个Phone都会使用方法区中的同一个成员方法。

如果我们改成 Phone two = one;那么将会是同一个对象的引用。one的改变同样会改变two的值,修改two的值,one的值也会改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值