`
cakin24
  • 浏览: 1368109 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

四张內存变化图揭秘引用类型数组的初始化

    博客分类:
  • java
阅读更多

一代码示例

class Person
{
	public int age; // 年龄
	public double height; // 身高
	// 定义一个info方法
	public void info()
	{
		System.out.println("我的年龄是:" + age
			+ ",我的身高是:" + height);
	}
}
public class ReferenceArrayTest
{
	public static void main(String[] args)
	{
		// 定义一个students数组变量,其类型是Person[]
		Person[] students;   //a
		// 执行动态初始化
		students = new Person[2];  //b
		// 创建一个Person实例,并将这个Person实例赋给zhang变量
		Person zhang = new Person();
		// 为zhang所引用的Person对象的age、height赋值
		zhang.age = 15;
		zhang.height = 158;
		// 创建一个Person实例,并将这个Person实例赋给lee变量
		Person lee = new Person();
		// 为lee所引用的Person对象的age、height赋值
		lee.age = 20;
		lee.height = 172;        //c
		// 将zhang变量的值赋给第一个数组元素
		students[0] = zhang;
		// 将lee变量的值赋给第二个数组元素
		students[1] = lee;          //d
		// 下面两行代码的结果完全一样,因为lee
		// 和students[1]指向的是同一个Person实例。
		lee.info();
		students[1].info();
	}
}

二运行结果
我的年龄是:20,我的身高是:172.0
我的年龄是:20,我的身高是:172.0

三结果分析





  

 

 
图一是a段代码执行完后的内存情况。
图二是b段代码执行完后的內存情况。
图三是c段代码执行完后的内存情況。
图四是d段代码执行完后的内存情况。

  • 大小: 12.5 KB
  • 大小: 14.6 KB
  • 大小: 21.7 KB
  • 大小: 23.8 KB
分享到:
评论

相关推荐

    内存初始化

    内存初始化的模式可以根据具体的应用需求而变化。一般而言,常见的初始化模式包括: 1. **清零**:将内存区域的值全部设为0,这是最基础也是最常用的初始化方式。 2. **设定特定值**:根据系统设计需求,将内存中的...

    值类型与引用类型(.html)

    - 非零初始化:未初始化的引用类型变量默认为null。 3. 类与结构的区别 - 结构(Struct)是值类型,而类(Class)是引用类型。 - 结构的实例化和操作更高效,类则支持更复杂的继承和多态。 - 结构不支持继承,而类...

    C语言中指针引用多维数组的教学实践.pdf

    ### C语言中指针引用多维数组的教学实践 #### 一、指针在C语言中的重要性 C语言是一种基础且重要的编程语言,被众多院校作为程序设计的入门语言。然而,C语言也因其语法的灵活性和变化多端的特点而被认为难以掌握...

    java【第4章:数组与方法】_数组的引用传递.

    在第四章“数组与方法”中,我们重点探讨了数组的引用传递这一关键概念。理解这个概念对于编写高效、可维护的Java代码至关重要。 首先,数组在Java中被视为对象,这意味着它们在内存中的存储方式与其他对象相同。当...

    第03讲___JAVA数组.ppt

    - 静态初始化是在声明数组的同时为其元素分配空间并赋值,例如:`int intArray[]={1,2,3,4}; String stringArray[]{"aaa", "bbb", "ccc"};` - 动态初始化则先声明数组,然后在另一行代码中通过`new`关键字分配空间并...

    Java数组练习题(带答案).doc

    - **知识点**: 正确的初始化语句应当正确地定义数组的类型和长度,并初始化数组的元素。选项D中的'hello'应为{"h","e","l","l","o"}。 2. **错误的引用** - **知识点**: 数组下标应该在有效范围内,`a[10]`超出...

    c++结构体的初始化和赋值1

    如果只给出了部分初始值,剩余的成员将使用默认的零初始化(对于数值类型通常是0,对于引用和指针是NULL,对于类类型是调用默认构造函数)。 比如定义一个结构体X: ```cpp struct X { int i; float f; char c; ...

    数组和集合

    数组声明后必须初始化,使用new关键字分配内存空间,并且指定数组长度。数组的初始化可以发生在声明时,也可以在之后使用花括号{}赋值。数组的元素通过下标(索引)来访问,下标从0开始。 数组作为一种特殊的类,每...

    VB自定义数组类

    10. **示例代码**:为了便于学习和使用,压缩包中的`ArrayClass.cls`文件可能包含了使用这个自定义数组类的示例代码,展示了如何实例化、填充、操作和清理数组对象。 通过理解和应用这些关键知识点,开发者可以充分...

    波形图表系统时间初始化设置_labview图标系统时间_

    在LabVIEW编程环境中,波形图表是用于可视化...掌握以上知识点后,你就能在LabVIEW中有效地设置和初始化波形图表的系统时间,创建出能够实时反映系统时间变化的动态图表了。这在监控、数据分析和测试应用中非常有用。

    数据结构多维数组课程设计

    - **目的:** 定义并模拟实现一种整型多维数组类型。 - **特点:** 支持任意整数开始的连续整数作为下标。 - **功能要求:** - 定义整型多维数组类型(以3维为例)。 - 下标变量赋值,并进行下标范围检查。 - 同...

    动态数组的一个小例子

    `initArray()`函数初始化这个结构体,`insert()`函数负责在数组末尾插入新的元素,如果当前容量不足,会通过`realloc()`进行扩展。`clearArray()`函数则释放动态分配的内存,重置数组状态。`countDuplicates()`函数...

    c++动态数组申请(包括一维,二维的)

    这里的`()`表示使用默认构造函数初始化数组,对于基本类型如int,这意味着所有元素被初始化为0。 3. 释放内存:使用完动态数组后,记得使用`delete[]`释放内存,防止内存泄漏: ```cpp delete[] arr; ``` 二、二...

    用C语言创建动态数组

    1. **初始化动态数组**:首先需要分配一段内存空间作为数组的初始空间。通常会先设定一个较小的初始大小,例如128个元素。 ```c int current_element = 0; // 当前元素数量 int total_element = 128; // 总元素...

    数学数组PPT学习教案.pptx

    打印`a[1][1]`、`a[2][1]`和`a[3][1]`的结果是5、0、0,因为二维数组的元素数量是由初始化时提供的元素数量决定的,对于`a[3][1]`,由于没有提供值,所以它实际上是未定义的,打印出0是因为内存中的随机值。...

    C语言动态分配二维数组

    首先为行指针数组分配内存,然后为整个二维数组分配内存,并初始化所有元素为0,最后设置每一行的起始地址。 通过以上内容,我们可以看到在C语言中动态分配二维数组的方法和步骤。正确使用这些技术可以帮助我们在...

    Java对象的容纳 数组。容器

    - 静态初始化数组:`MyObj[] myObj4 = {new MyObj(), new MyObj(), new MyObj()};` - 动态初始化数组:`myObj1 = new MyObj[]{new MyObj(), new MyObj(), new MyObj(), new MyObj()};` - 通过函数返回数组:`...

    以太坊Solidity未初始化存储指针安全风险浅析.pdf

    根据Solidity的官方手册,结构体作为局部变量时默认存储位置是storage,因此,如果它没有被初始化,它的内部字段可能会错误地引用到其他变量,导致合约状态被破坏。 #### 解决方案 文档中为结构体和数组的未初始化...

    易语言重定义多维数组

    在易语言中,动态调整数组大小的能力是非常有用的,特别是在程序运行过程中需要根据需求变化调整存储空间的情况。下面我们将深入探讨这个主题。 首先,让我们了解一下“重定义”多维数组的概念。在传统的编程中,...

    节数组和集合类PPT学习教案.pptx

    创建数组使用`new`关键字,指定数组类型和元素数量。例如: ```java int[] ai = new int[10]; String[] aS = new String[3]; Circle[] aC = new Circle[5]; ``` 6.1.3 数组元素的初始化 数组元素可以在声明时初始化...

Global site tag (gtag.js) - Google Analytics