困难

基本的

学习时间

30分钟

适合人群

零基础

开发语言

爪哇

开发环境 1. 默认值

需要:

分别创建8种数据类型和String类型的数组,然后显示输出它们的初始元素。

想法:

使用new创建byte、short、int、long、float、double、char、boolean、String类型的数组,长度为3,显示其中的元素。

完成:

结果:

输出二维int数组java_java输出数组_java输出一个数组

从运行结果来看,首先程序没有报错,说明系统为数组中的成员初始化了一个值。 该值是每种类型的默认值。 对比一下运行结果和我们数据类型的默认值,你就会知道:

java输出一个数组_java输出数组_输出二维int数组java

完全一样。

为什么数组要给元素一个默认值?

正因为如此,我们都知道变量在使用之前需要先进行初始化,这就是其中之一。 其次是数组的大小,也就是长度是固定的,所以你必须确定你的空间大小,系统必须在内存中为这个数组预先分配空间给你存储值。 对于这两个因子,当用new关键字初始化数组时,所有的内部因子都被初始化,内部元素的初始化值为该类型的默认值。

2.改变数组中的值

格式:

java输出一个数组_输出二维int数组java_java输出数组

例如:数字[0] = 100;

需要:

创建一个整数数组,并将数组中的值赋给99。

想法:

创建一个长度为 3 的 int 类型数组。通过数组下标更新数组元素。

完成:

java输出数组_java输出一个数组_输出二维int数组java

结果:

输出二维int数组java_java输出一个数组_java输出数组

从运行结果来看,是正确的。 说明一下,如果我们要改变数组中元素的值,只需要通过数组下标赋值一个新的值即可。

3.给数组遍历赋值

需要:

创建一个整数数组,并将数组中的值赋给99。

想法:

创建一个长度为 3 的 int 类型数组。通过数组下标更新数组元素。

完成:

输出二维int数组java_java输出一个数组_java输出数组

结果:

输出二维int数组java_java输出一个数组_java输出数组

从运行结果来看,是正确的。

4.数组长度固定

特征:

数组的长度是固定的。

核实:

数组的长度不固定。

想法:

使用new关键字创建一个长度为3的int类型数组,给下标为9的元素赋值,然后观察数组中新增了一个元素。

完成:

java输出数组_java输出一个数组_输出二维int数组java

结果:

java输出数组_java输出一个数组_输出二维int数组java

程序出现错误,错误信息:

输出二维int数组java_java输出数组_java输出一个数组

文字版:

线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException:索引 9 超出长度 3 的范围

其中ArrayIndexOutOfBoundsException之前出现过,数组下标越界异常。 说明我们不仅没有添加新元素,还出现了数组下标越界异常。

确认了“数组长度固定”的性质。

5. 对数组的引用

我们先来看一下数据类型的分类:

java输出一个数组_输出二维int数组java_java输出数组

其中,基本的数据类型之前都学过。 现在让我们开始使用引用数据类型。

什么是引用?

在什么是引用之前,我们先简单了解一下,Java为了存放局部变量和成员变量,在内存中开辟了若干空间。 其中,有两个空间和我们的变量密切相关,一个叫做“栈内存”,一个叫做“堆内存”:

java输出一个数组_输出二维int数组java_java输出数组

当我们定义一个局部变量时,比如int x = 3; Java会在栈内存中开辟空间:

输出二维int数组java_java输出数组_java输出一个数组

当我们使用new关键字定义一个变量时,比如int[] arr = new int[3]; Java会在堆内存中开辟空间,为对象分配一个内存地址,然后栈内存中的变量会指向堆内存中的内存地址:

java输出数组_java输出一个数组_输出二维int数组java

我们可以看到变量x后面直接跟着变量值,变量arr指向数组的首地址。

演示:

用于定义一个数组x,用new关键字初始化,长度为3。显示输出数组x变量,而不是输出数组中的元素。

完成:

输出二维int数组java_java输出数组_java输出一个数组

结果:

java输出数组_java输出一个数组_输出二维int数组java

从运行结果来看,“[I@566776ad”是什么意思?

[:表示该对象是一个数组

I:表示数组类型为int类型

566776ad:内存地址

在内存地址前加上“@”符号就是“[I@566776ad”。

之所以能输出“[I@566776ad”,是因为每个对象都有一个toString方法。 至于toString方法的解释,在后续文章中有详细的解释。

6.多个变量指向同一个数组

演示:

定义一个长度为 3 的数组 x。定义一个等于数组 x 的数组 y。 修改数组y第一个元素的值为99,分别打印数组x和数组y。

完成:

java输出一个数组_java输出数组_输出二维int数组java

结果:

java输出一个数组_输出二维int数组java_java输出数组

工作流程:

第一步,创建数组 x:

java输出一个数组_java输出数组_输出二维int数组java

第二步是创建一个数组 y 并将数组 x 赋值给 y:

java输出一个数组_输出二维int数组java_java输出数组

这一步执行后,变量x和变量y同时指向一个数组。

第三步,修改数组y的第一个元素为99:

java输出数组_java输出一个数组_输出二维int数组java

这一步执行完后,数组第一个元素的值已经变成了99,应该可以清楚的看到堆内存中只有一个数组,变量x和y同时指向这个数组,所以x[0]和y[0]的值都是99。

7.数组复制

我们知道,如果创建一个数组x,然后将数组x赋值给数组y,这不叫复制数组。 这称为指向同一个数组对象的多个变量。 而我们要做的是将数组 x 完全复制到数组 y 中。

需要:

有一个数组,有五个元素,分别是数字 1-5,请将这个数组完整地复制到另一个数组中。

想法:

创建数组 x。 因为元素值已知,所以使用花括号{}来初始化方法。 使用遍历的方法将数组x的所有元素复制到新的数组y中。

完成:

java输出数组_java输出一个数组_输出二维int数组java

结果:

java输出数组_输出二维int数组java_java输出一个数组

从运行结果来看,我们成功分配了数组。

我们还有一个更方便的方法,就是调用System.arraycopy方法来完成对数组的赋值。

完成:

java输出一个数组_输出二维int数组java_java输出数组

结果:

java输出数组_输出二维int数组java_java输出一个数组

从运行结果来看,复制数组是完全正确的。

System.arraycopy方法原型:

输出二维int数组java_java输出一个数组_java输出数组

删除说明:

java输出一个数组_输出二维int数组java_java输出数组

有几个参数要说:

src:源数组。

srcPos:源数组中的起始位置。

dest:目标数组。

destPos:目标数组中的起始位置。

length:要复制的数组元素的数量。

再看看我们实现中写的代码:

输出二维int数组java_java输出数组_java输出一个数组

源数组为x,目的数组为y,从数组x的下标0取值,接收值的数组y从下标0接收值,待取数组元素个数复制的是数组 x 的长度。

8.数组排序

需要:

将数字11、3、25、7、10、5存入数组,然后从小到大排序。

想法:

声明一个 int 类型的数组。 数组使用大括号 {} 进行初始化。 使用遍历数组的方法排序,先找到最小的,记录下它的下标java输出数组,然后放在第一个元素的位置上,即和下标为0的元素交换位置; 然后找到次小的,记录下它的下标,然后放在第二个元素的位置上,也就是和下标为1的元素交换位置。以此类推java输出数组,我们要找最后一个最小的,用同样的方法同前。

完成:

输出二维int数组java_java输出数组_java输出一个数组

结果:

java输出一个数组_输出二维int数组java_java输出数组

工作流程:

java输出数组_java输出一个数组_输出二维int数组java

上图是代码流程,只展示了一次。 每轮比对的次数和过程如下图所示。

第一轮对比:

java输出一个数组_输出二维int数组java_java输出数组

第二轮对比:

java输出数组_输出二维int数组java_java输出一个数组

第三轮对比:

java输出数组_java输出一个数组_输出二维int数组java

第四轮对比:

java输出数组_java输出一个数组_输出二维int数组java

第五轮比较:

输出二维int数组java_java输出数组_java输出一个数组

数组基础知识总结:数组遍历总结

至此,Java中数组详解的讲解就告一段落了,更多内容请继续关注。

回答提问