Java基础6--面向对象--程序运行内存图解

本文详细讲解了Java中的二维数组及其定义方式,包括内存图解和实例演示。此外,还深入探讨了面向对象的概念,如类与对象的关系、封装、参数传递等,帮助读者更好地理解和掌握Java基础知识。
摘要由CSDN通过智能技术生成

6-1,二维数组的定义方式

1,定义:int[][] arr = new int[3][2];

创建一个二维数组,这个其实是有三个一维数组,一维数组中的每个元素又引用了一个一维数组。

2,打印而为数组:

Sop(arr);直接打印二维数组。 打印[[I@C17164,[[是二维数组的意思,I是int的意思。

Sop(arr[0]);直接打印二维数组中角标为0的一维数组。打印[I@b8e622,[是一维数组的意思。

Sop(arr[0][0]);直接打印二维数组中脚标为0的一位数组的角标为0的元素。打印0。

3,int[][] arr = new int[3][2];

    arr[1][1]= 88;

的内存图解:


步骤:

(1)从main函数进入,读到arr局部变量,把arr入栈。

(2)因为arr是数组类型的,所以在堆内存中创建实体,创建一个一维数组,附地址0X0045,并将三个元素初始化为null,因为每个元算又引用到一个一位数组。

(3)堆中的每个元素又是一个一维数组,在堆中新创建三个一维数组,并分配地址值,初始化为0,因为是int型。再把int型数组的地址值赋给之前创建的相应的一位数组的元素。

(4)将数组的引用地址赋值给栈空间的arr,arr指向了0X0045内存地址。

(5)第一句话读完,读下面的一句,给角标为[1][1]的元素赋值为88,这时根据arr的引用地址可以找到0X0045的数组位置,根据第一个[1]可以找到这个数组角标1指向的地址,找到0X0034指向的数组,再根据第二个[1]找到角标为1的元素,这时这个元素是0,然后直接赋值为88,执行完毕。

 

6-2,创建子数组长度不等的二维数组

方式:

int[][] arr = new int[3][];
//分别对二维数组中的每一个小数组进行初始化
arr[0] = new int[2];
arr[1] = new int[1];
arr[2] = new int[3];

步骤:

(1)从main开始程序,读到int数组型局部变量arr,将arr进栈操作。

(2)arr是一个数组,在堆内存中创建一个一位数组,分配内存地址。

(3)arr有三个元素,创建一个大小为3的一维数组,其中每一个元素又指向了另一个一维数组,所以赋给初始值null。但是因为创建二维数组时是以new int[3][]这种方式创建的,也就是第二个没值,所以这时不能创建那三个一维数组,此时内存中只有最上面的长度为三的一位数组。

(4)将数组的地址赋给栈内存中的arr,arr引用指向堆内存中的数组的地址。

(5)读到第二句,创建了一个一维数组,这时才在内存中创建地址为0X0034的数组,大小为2,初始化元素值为0,并将这个地址赋给原来数组中的[0]号元素。<

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值