zoukankan      html  css  js  c++  java
  • 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。

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

  • 相关阅读:
    Java 学习笔记之 线程interrupted方法
    Java 学习笔记之 线程interrupt方法
    定义函数
    调用函数
    pass语句
    循环
    条件语句
    别样赋值
    import语句
    字典方法
  • 原文地址:https://www.cnblogs.com/wsw-bk/p/7634985.html
Copyright © 2011-2022 走看看