JAVA-初步认识-第六章-对象的内存体现

一.

说完了细节,接下来讲述的是重点。用蓝色标记出来的语句。

对象产生以后,在内存中是什么样?之前谈论到数组的时候,说只要是new的东西都要涉及堆内存

堆里面存放的都是对象,数组本身也是一个特殊的对象。凡是new建立的,都在堆内存当中。

下面仔细研究Car c=new Car(); 

首先这句话定义在主函数中,那么c就是局部变量。先加载主函数,里面同时有一个局部变量c。这时,c要赋值,右边先进行运算,再把值赋给左边。右边通过一个new,在堆内存中开辟了空间。这个空间一开辟,就分配了地址,分配完之后。开辟的空间就相当于汽车的空间。这辆汽车具备这轮胎数和颜色这样的属性。num,color就是堆内存对象中的变量。堆内存中的变量有什么特点?默认初始化值。对于字符串类型在堆内存中的初始化值是null(空),这样一来,对象就创建完了(根据图纸,汽车生产完了)。生产结束后,将0034赋值给c,这辆车就有了名字,叫做c。这样就把对象创建完毕了。

如果接着来句c.run();是什么样的?

如果不做调用函数的动作(错了,这里已经在调用函数了),结果显示如下,和我们之间的讲解完全对应得上。这可以解读为,生产了一辆汽车,轮胎也没给,漆也没有上。

现在我们要给它装轮胎,上漆。如果执行c.num=4;也就意味着c这个引用型变量,去找到它所指向的对象。并给这个对象中,已有的num赋了个新值。同样的,color也是这样。当我们再一次使用这个车,并调用它的运行方法时,它回来找这个对象的时候,应该是4和red。

这时,就将代码的内存图例讲完了。

下面这张截图对应的只是Car c1=new Car();这一句话。

接着显示的就是第二个语句。

然后,c1.num=5, 在用c1所具备的地址值找寻堆当中的对象,并把5赋值给了对象中的num,赋完5,0就没了。同样的,c2.color="blue"也是一样的流程。

c1.run()这句话,调用的就是c1这个对象的run方法,这个方法打印的时候,应该打印的是c1这个对象的内容。

接着执行第一个语句。

接着执行第二句话

接着执行第三句和第四句,这里,其实自始自终都是一个对象。

最终,在执行c1.run()时,c1回来找这个对象的num,color值的时候,就是8和red。

接着书写c1.null

多引用指向同一对象

一定要记得,一但产生一个对象,这个对象百分之百具备着这个类里面所描述的内容

堆内存中的对象,无论是对象还是数组,都是实体。实体的出现有什么用?封装数据,也就是上面所说的5和null。

数组中封装的是同一类型的数据,而对象中封装的是一个事物当中所具备的数据。→对象的出现,是为了封装数据。

 

posted @ 2017-10-07 16:14  前锋营  阅读(205)  评论(0编辑  收藏  举报