这一节我们来简单的看一看对象在内存中是什么样子呢,怎样体现。

我们以上一节的測试代码为例。

我们在函数的内存分配分析过。当该代码执行时,首先会载入主函数在栈内存中为main函数分配一个空间;

然后执行函数中的第一行语句。Car myCar = new Car();

然后把局部变量myCar载入到栈内存,然后通过new在堆内存中分配空间,然后把这个地址赋给变量myCar;

我们看一看是不是这样

class CarDemo
{
public static void main(String[] args)
{
//在计算中创建一个car的实例,通过new这个keyword.
Car myCar = new Car();//myCar就是一个类类型的引用变量,指向了该类的对象.
System.out.println(myCar);
}
}

结果:



我们看到了myCar所指的位置,这里我们就这是我们小汽车的车库吧,它就在139a55这个地方.

而在上面的堆内存中会对象的属性变量num,color,brand这些变量,因为堆内存中的变量会默认初始化,上面的变量会被默认初始化;

num=0,color=null,brand=null;

此时假设我们没不做2-4行语句,而是直接执行myCar.start(),我们看看结果例如以下:

class CarDemo
{
public static void main(String[] args)
{
//在计算中创建一个car的实例,通过new这个keyword.
Car myCar = new Car();//myCar就是一个类类型的引用变量,指向了该类的对象.
//myCar.num = 4;
//myCar.color = "red";
//myCar.brand = "BWM";
myCar.start();
myCar.run();//要使用对象中的内容,可能通过 对象.成员 的形式来完毕调用.
}
}

结果:



我们看到了三个属性被默认初始化了,那么就是说我们没有给属性赋值,系统也会为我们打造一辆空皮汽车的.

那么再来看一下当们赋值之后,我们再来看一下我们的汽车是什么样子:

class CarDemo
{
public static void main(String[] args)
{
//在计算中创建一个car的实例,通过new这个keyword.
Car myCar = new Car();//myCar就是一个类类型的引用变量,指向了该类的对象.
myCar.num = 4;
myCar.color = "red";
myCar.brand = "BWM";
myCar.start();
myCar.run();//要使用对象中的内容,可能通过 对象.成员 的形式来完毕调用.
}
}

结果:

我们看到程序会先分别给num,color,brand这三个属性赋值,也就是说我们得到了一个完完整整的宝马汽车,而存放这辆车的地址没有发生变化,还是原来堆内存中的地址值.

同理假设我们创建多个car的实例,内存中的载入过程都是一样的,它们都有各自不同的空间和相应的地址.

[javase学习笔记]-6.3 对象的内存体现的更多相关文章

  1. JavaSE 学习笔记02丨对象与类

    Chapter 4. 对象与类 4.1 面向对象程序设计概述 面向对象程序设计(简称OOP),是当今主流程序设计范型.面向对象的程序是由对象组成的,每个对象(来自于标准库或自定义的)包含对用户公开的特 ...

  2. [javase学习笔记]-8.6 静态的内存载入

    之前几节我们一直在说statickeyword所修饰的静态,那么在程序执行时,内存中static是怎样体现的呢?这一节我们就来看一看. 我们还是先看一个样例.希望我们通过对这个样例的分析让我们刚開始学 ...

  3. JavaSE 学习笔记之Object对象(八)

    Object:所有类的直接或者间接父类,Java认为所有的对象都具备一些基本的共性内容,这些内容可以不断的向上抽取,最终就抽取到了一个最顶层的类中的,该类中定义的就是所有对象都具备的功能. 具体方法: ...

  4. javaSE学习笔记(17)---锁

    javaSE学习笔记(17)---锁 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率.本文旨在对锁相关源码(本文中的源码来自JDK 8).使用场景进行举例,为读 ...

  5. javaSE学习笔记(15) ---缓冲流、转换流、序列化流

    javaSE学习笔记(15) ---缓冲流.转换流.序列化流 缓冲流 昨天复习了基本的一些流,作为IO流的入门,今天我们要见识一些更强大的流.比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化 ...

  6. JavaSE学习笔记(14)---File类和IO流(字节流和字符流)

    JavaSE学习笔记(14)---File类和IO流(字节流和字符流) File类 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 构造方 ...

  7. JavaSE学习笔记(13)---线程池、Lambda表达式

    JavaSE学习笔记(13)---线程池.Lambda表达式 1.等待唤醒机制 线程间通信 概念:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同. 比如:线程A用来生成包子的,线程B用 ...

  8. JavaSE学习笔记(12)---线程

    JavaSE学习笔记(12)---线程 多线程 并发与并行 并发:指两个或多个事件在同一个时间段内发生. 并行:指两个或多个事件在同一时刻发生(同时发生). 在操作系统中,安装了多个程序,并发指的是在 ...

  9. javaSE学习笔记(10)---List、Set

    javaSE学习笔记(10)---List.Set 1.数据存储的数据结构 常见的数据结构 数据存储的常用结构有:栈.队列.数组.链表和红黑树. 1.栈 栈:stack,又称堆栈,它是运算受限的线性表 ...

随机推荐

  1. MYSQL 表中汉字写入或字段赋值时乱码情况排误

    -- 当改动字段值.或是直接写入时,汉字变成乱码情况 .[可注意一下数据库名,记得改动] -- 当字符顺序对汉字不兼容时,可能直接导致乱码情况发生. 最好做到库.表.字段(字符类型)排序规则是否一致 ...

  2. ORACLE关于锁表查询的部分SQL

    http://www.cnblogs.com/quanweiru/archive/2012/08/28/2660700.html --查询表空间名称和大小 SELECT UPPER (F.TABLES ...

  3. UVa 10820 - Send a Table

    题目:找到整数区间[1.n]中全部的互质数对. 分析:数论,筛法,欧拉函数.在筛素数的的同一时候.直接更新每一个数字的欧拉函数. 每一个数字一定会被他前面的每一个素数筛到.而欧拉函数的计算是n*π(1 ...

  4. IOS学习笔记45--UITableView性能优化

    说实话,面试的时候已经被问到几次这个问题,然后就搜索了一下,看到了这篇优化文章,感觉不错,转来日后作为一种UITableView优化的方法. 使用不透明视图.      不透明的视图可以极大地提高渲染 ...

  5. php之快速入门学习-14(php-for循环)

    PHP 循环 - For 循环 循环执行代码块指定的次数,或者当指定的条件为真时循环执行代码块. for 循环 for 循环用于您预先知道脚本需要运行的次数的情况. 语法 for (初始值; 条件; ...

  6. js 垃圾回收机制与内存管理

    1.原理 js按照固定的时间间隔找到不在继续使用的变量,释放其占用的内存. 2.实现方式 (1)标记清除 垃圾收集器给存储在内存上的所有变量都加上标记: 之后,去掉环境中的变量以及被环境引用变量的标记 ...

  7. Linux下Tar压缩使用

    具体的可以在linux环境下 用tar --help查看详细说明格式:tar [option] file -c create create a new archive -x extract extra ...

  8. oracle date日期类型 精析

      一.date 1.date.sysdate格式说明 展示 date类型,展示格式既可以为:YYYY/MM/DD,也可以为YYYY/MM/DD HH24:MI:SS: 其存储格式只有一种:YYYY/ ...

  9. POJ 1579 Function Run Fun 记忆化递归

    典型的记忆化递归问题. 这类问题的记忆主要是利用数组记忆.那么已经计算过的值就能够直接返回.不须要进一步递归了. 注意:下标越界.递归顺序不能错,及时推断是否已经计算过值了,不要多递归. 或者直接使用 ...

  10. HDUOJ----(1175)连连看

    连连看 Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...