`
cakin24
  • 浏览: 1383782 次
  • 性别: 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. **设定特定值**:根据系统设计需求,将内存中的...

    2020老杜最新Java零基础进阶视频教程-数组课件

    同时,`ArrayTest02`展示了引用类型数组(`Student[] student`)的声明和初始化,以及`Student`类的定义。`ArrayTest03`中虽然没有完整的代码,但可以看出继续探讨引用类型数组的使用,特别是初始化和赋值的过程。 ...

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

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

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

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

    第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`文件可能包含了使用这个自定义数组类的示例代码,展示了如何实例化、填充、操作和清理数组对象。 通过理解和应用这些关键知识点,开发者可以充分...

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

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

    JavaScript数组用法详解

    使用 Array() 构造函数可以创建一个空数组、带有初始元素的数组、指定长度的数组等。数组直接量是一种简洁的创建数组的方式,只需要将元素用逗号分隔,放入方括号中即可。 数组的 length 属性是一个特殊的属性,它...

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

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

    用C语言创建动态数组

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

    C语言动态分配二维数组

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

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

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

    易语言重定义多维数组

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

    Java基础--基本数据类型与引用数据类型在内存结构上的区别

    数据类型与引用数据类型在内存结构上的主要区别在于它们存储方式和内存分配的不同。在Java中,数据类型分为两种:基本数据类型(如int、char、boolean等)和引用数据类型(如对象、数组等)。 一、基本数据类型 ...

    动态数组的申请和释放

    1. **初始化与类型定义**:首先定义了一个类型`cntr`作为计数器,并获取了计数器和数据类型`T`的大小。 2. **释放内存**:如果传入的元素个数为0,则释放之前分配的内存。 3. **获取原有数组大小**:如果`oldmem`不...

    c++数组实验

    - **初始化**:可以通过嵌套循环或者直接初始化列表来初始化二维数组。 - 使用循环:`for (int i = 0; i ; i++) for (int j = 0; j < 4; j++) cin >> b[i][j];` - 直接初始化:`int b[3][4] = {{1, 2, 3, 4}, {5, ...

    linux 内存管理 start_kernel

    4. 内存页面结构初始化(page_address_init):内存页面是内存管理的基本单位,该函数负责初始化页面地址映射,以便内核可以正确地管理物理内存。 5. 内核内存分配(kmem_cache_init):这个函数初始化内核内存池,...

Global site tag (gtag.js) - Google Analytics