阶段1 语言基础+高级_1-2 -面向对象和封装_8两个对象使用同一个方法的内存


两个对象在main方法里面调用
新建一个Demo02PhoneTwo类,复制之前的代码到这里

这里创建了一个Two对象

one对象是苹果
two对象。把参数改成三星。


内存里又发生了什么事,这次不一样的地方是有两个对象

程序要想执行,main方法先进栈,

main进栈后就要逐行的执行。首先第一行我们创建了对象叫做one。

这就是一个局部变量,名称中保存的是一个地址的值,谁的地址呢?堆的,凡事new出来的都在堆当中

成员变量过来以后会有默认值

接下来是成员方法,成员方法很特殊。为什么特殊?他所保存的实际上是地址的值?谁的地址的值呢?是右侧的,在方法区中的地址值。看下面绿色箭头的指向

自己的地址是0X666.自己的地址就赋值交给one去处理。看红色箭头的指向。。根据这个地址能找到这个对象。

下面就是赋值的操作,苹果 8388.0 、黑色。默认值已经被修改为指定的数值

再往后就是调用两个方法call和sendMessage这两个方法

one通过红色找到这个对象,再通过绿色找到对应的方法


显示蓝色的箭头部分,call方法进栈。给谁打电话?乔布斯。然后调用方法,调用后 看差号。立马出栈


然后是sendMessage方法,红色、绿色、进栈、蓝色、调用方法

第二个对象

里面的成员方法的地址和第一个对象的地址是一样的

看有色绿色的箭头

0x999给对象two赋值

主要看下面橙色的箭头

修改变量的值

调用最下面的红色框内的 call方法和sendMessage方法。通过橙色箭头找对对象。再通过绿色箭头找到方法。




two如果不是重新new 的对象


posted @ 2019-07-16 14:25  高山-景行  阅读(150)  评论(0编辑  收藏  举报