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

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

我们在函数的内存分配分析过。当该代码执行时,首先会载入主函数在栈内存中为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. iptables与SELinux

    iptables: 开始配置我们来配置一个filter表的防火墙.(1)查看本机关于IPTABLES的设置情况 [root@tp ~]# iptables -L Chain INPUT (policy ...

  2. JavaScript 之 parseInt

    首先还是从很热门的实例parseInt("09")==0说起. parseInt(numString, [radix])这个函数后面如果不跟第2个参数来表示进制的话,默认是10进制 ...

  3. Android IO存储总结

    1 前言  android设备的存储特点:  分内存和SD卡两种存储设备,且android设备存储空间小,且系统碎片化等情况.     SD卡:老版本的android设备 不存在内置SD        ...

  4. uva 10721 - Bar Codes(dp)

    题目链接:uva 10721 - Bar Codes 题目大意:给出n,k和m,用k个1~m的数组成n,问有几种组成方法. 解题思路:简单dp,cnt[i][j]表示用i个数组成j, cnt[i][j ...

  5. 子查询二(在HAVING子句中使用子查询)

    HAVING子句的主要功能是对分组后的数据进行过滤,如果子查询在HAVING中表示要进行分组过滤,一般返回单行单列的数据 示例一.查询部门编号,人数,平均工资,并且要求这些部门的平均工资高于公司的平均 ...

  6. MySQL 读写分离 使用驱动com.mysql.jdbc.ReplicationDriver

    说明文档:http://dev.mysql.com/doc/refman/5.1/en/connector-j-reference-replication-connection.html 代码例子: ...

  7. Linux 如何判断自己的服务器是否被入侵

    如何判断自己的服务器是否被入侵了呢?仅仅靠两只手是不够的,但两只手也能起到一些作用,我们先来看看UNIX系统上一些入侵检测方法,以LINUX和solaris为例. 1.检查系统密码文件 首先从明显的入 ...

  8. idea 修改编辑区字体样式、大小

      idea 修改编辑区字体样式.大小 CreateTime--2018年4月26日10:36:59 Author:Marydon 设置-->Editor-->Font-->修改Fo ...

  9. flume的memeryChannel中transactionCapacity和sink的batchsize需要注意事项

    一. fluem中出现,transactionCapacity查询一下,得出一下这些: 最近在做flume的实时日志收集,用flume默认的配置后,发现不是完全实时的,于是看了一下,原来是memery ...

  10. mysql中的慢查询日志

    首先我们看一下关于mysql中的日志,主要包含:错误日志.查询日志.慢查询日志.事务日志.二进制日志: 日志是mysql数据库的重要组成部分.日志文件中记录着mysql数据库运行期间发生的变化:也就是 ...