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

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

我们在函数的内存分配分析过。当该代码执行时,首先会载入主函数在栈内存中为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. 在Ubuntu 桌面版 12.04 LTS配置sftp

    第一步:检查vsftpd是否安装了 root@hy-Aspire-SA10:~# rpm -qa|grep vsftpd 没有输出,说明没安装. 第二步:安装vsftpd root@hy-Aspire ...

  2. (LeetCode 86)Partition List

    Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...

  3. CentOS6.X下安装配置独立SVN服务器Subversion server

    Subversion(简称SVN,svn),一个开放源码的版本号控制系统.相较于RCS.CVS,它採用了分支管理系统,它的设计目标就是代替CVS.互联网上非常多版本号控***务已从CVS转移到Subv ...

  4. C#.NET常见问题(FAQ)-Visual Studio VS如何显示行号

    工具-选项,然后勾选"显示所有设置",然后在文本编辑器下面找到所有语言,勾选"行号"即可.     更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: ...

  5. The 6 inspectors in XCode

    Name Shortcut Key Description file helper Command + Option + 1 shows you all the file details relate ...

  6. STL与多线程+写时拷贝

    http://blog.csdn.net/liuxuejiang158blog/article/details/13251379 STL并不是线程安全的,当多个线程同时读取STL时没什么问题.当多个线 ...

  7. Internal Server Error: /favicon.ico 的解决方法

    项目大致环境:Linux + Apache + Django + Python 因为项目的需求重写了Python Logger.error 方法,每当记录错误日志的时候就发送一封邮件到指定的邮箱.项目 ...

  8. kafka delete topic

    Don't think it is supported yet. Take a look at this JIRA tracking Delete Topic. For delete manually ...

  9. Chrome 对于 glyphicon 字体图标不显示的解决的方法

    在将Chome默认字体渲染为微软雅黑后,部分字体图标显示为方框,这里Chome扩展文档提供的解决的方法为: 找到  custom.css 文件,路径为: C:\Users\(username)\App ...

  10. python之函数用法getattr()

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法getattr() #getattr() #说明: ''' getattr(...) ...