难度
初级
学习时间
30分钟
适合人群
零基础
开发语言
Java
开发环境
- JDK v11
- IntelliJ IDEA v2018.3
1.什么是数组?
抛砖引玉:
我们前面学过8大基本数据类型,如int x:
但是,这个变量x只能存储一个数字,要么存储1,要么存储2,它不能存1、2、3等等很多数字。那你为什么要存很多数字呢?有什么样的需求呢?
需求:
有一家网店,获得了3个评分,请先显示输出这个3个评分,然后求平均评分是几分。
思路:
- 定义三个变量分别对应三个评分
- 将三个评分加起来,然后除以3求平均评分
实现:
结果:
讨论:
从运行结果来看,完全正确没有错误,但是从代码上来看就有问题,为什么呢?
这是3个评分,算少的,假如有100个评分呢?
定义变量从star1、star2一直到star100?
首先,评分的名字我们需要知道吗?不需要!
也就说我们只需要找一个地方将这些评分存储起来,到时候要用拿出就行。
也就是说,我们需要一个容器?
对,需要一个容器。
接下来,给大家介绍一个容器,它叫数组。
定义:
数组是相同类型的、用一个标识符名称封装到一起的一个对象序列或基本类型数据序列。
2.数组的声明
数组是通过中括号[]来定义和使用的。要定义一个数组,只需在类型名后加上一个中括号[]即可。如:
或者,中括号[]置于标识符后面:
推荐使用第一种:float[] stars;
3.数组的初始化
要使用数组,除了声明以外,还必须得初始化。
数组初始化有三种初始化方式。
- 数据类型[] 标识符 = {元素1,元素2...};
- new 数据类型[];
- new 数据类型{元素1,元素2...};
无论使用哪种初始化方式,非常重要的一点是:数组初始化必须明确数组的长度!!!
我们先来看第一种方式。
大家可以看到的是,stars数组是一个float类型数组,它里面有三个初始值3.5、4.0、3.0。
结论:
使用大括号{}初始化数组的时机是你已经知道数组有哪几个元素。换言之,就是你已经知你创建的这个数组要存储的元素是什么的时候,你就可以使用大括号{}初始化。
前面不是说数组初始化必须明确数组的长度吗?我怎么没看见指定数组长度的操作?那是因为当数组使用大括号{}初始化数组时,大括号{}里面写多少元素,那么数组的长度就是多少。
上面例子中,starts数组的长度是3。
再来看第二种数组初始化方式。
new是一个新关键字,用于创建对象。new关键字后续文章会有详细讲解。暂时理解为它可以开辟一块存储空间,供数组存放数据。
我们看到new float[3],其中中括号表示数组,3表示数组长度。
接下来,我们来看第三种方式:
代码实现:
和第一种定义数组的方式很类似,其实,第一种就是上面这种方式的简写形式。
4.获取数组中的元素
现在数组初始化了,怎么获取数组中的元素?什么叫元素?来看下图:
绿色的那一行是元素序列,里面的每一个值都称之为元素。如第一个元素为3.5,第二个元素为4.0,第三个元素3.0。
灰色的那一行是下标序列,里面的每一个值都称之为下标,数组的下标默认是从0开始的。
怎么获取数组里面的元素呢?
可以通过数组下标来获取对于的元素。
格式:
例如,获取第一个元素:stars[0];第二个元素:stars[1];
实现:
结果:
5.数组最大下标
需求:
定义一个数组,初始值为1、2、3,依次显示输出它们,然后计算数组内所有元素之和并显示输出。
思路:
- 定义一个int类型的数组。
- 已经知道存储1、2、3三个数字,所以可以使用大括号{}初始化数组。
- 使用下标取出数组内所有元素并显示输出,然后计算它们之和并显示输出。
实现:
结果:
从运行结果来看,正确无误。
该例中,我们从0开始取下标,取了0、1、2,如果我们取下标为3的元素会是什么?我们来看一下。
实现:
结果:
错误信息:
文字版:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
意思是发生了一个java.lang.ArrayIndexOutOfBoundsException异常,异常原因是:Index 3 out of bounds for length 3。
异常是什么意思?
异常暂时先没讲解到,大家先理解为程序发生错误,代码写的不对。
ArrayIndexOutOfBoundsException是什么意思?
数组索引超出界限异常,索引就是下标,超出界限就是下标超出最大下标界限。
最大下标怎么获取?
最大下标 = 数组长度 - 1。
比如本例中的numbers数组的长度为3,那么它的最大下标是3-1=2,numbers数组最大下标为2。
6.数组的长度length
需求:
定义一个存储正整数的数组,数字是10以内的正整数,显示输出数组长度和最后一个元素。
思路:
- 定义一个int类型的数组。
- 既然已经知道是10以内的正整数,那么就使用大括号{}初始化数组。
- 获取最大下标。
实现:
结果:
从运行结果来看,正确无误。
但是从书写程序的思路来看,有点不妥,哪里不妥呢?
计算数组长度的地方不妥,本例中,我们知道大括号里面有多少个元素,所以可以很快通过数数得到数组的长度。
假如有更多的元素,我们还能通过数数得到数组的长度吗?能肯定能,就是不知道数到猴年马月去了。
有没有一种简单快速地获取数组长度方式呢?
答案是有的。
在数组对象中,有一个叫“length”的成员,它专门记录数组的长度。
下面我们来试试它吧:
结果:
从运行结果来看,正确无误。
而且我们还能显示输出一下数组的长度:
结果:
数组长度为9,也是正确的。
以后大家获取数组的长度请使用数组的length成员变量。
6.遍历数组
7.for循环遍历数组
8.while循环遍历数组
9.do-while遍历数组
11.数组的引用
12.大括号{}初始化数组的妙用
new String({'a','b','c'});
本章总结:
- 数组是一系列相同类型的序列。
- 数组的定义方式一:数据类型 标识符[]
- 数组的定义方式二:数据类型[] 标识符
- 数组的初始化方式一:数据类型[] 标识符 = {元素1,元素2......}
- 数组的初始化方式二:数据类型[] 标识符 = new 数据类型[长度];
- 数组的初始化方式三:数据类型[] 标识符 = new 数据类型[]{元素1,元素2......}
- 数组的初始化必须指定长度。
- 数组的长度通过length成员获取。
- 数组的最大下标 = 数组的长度 - 1。
- 数组下标越界异常是ArrayIndexOutOfBoundsException。下标的取值范围在0-最大下标之间,请勿越界。
至此,Java中数组详解相关内容讲解先告一段落,更多内容请持续关注。
答疑
如果大家有问题或想了解更多前沿技术,请在下方留言或评论,我会为大家解答。
上一章
“全栈2019”Java第二十七章:流程控制语句中循环语句for
下一章
“全栈2019”Java第二十九章:数组详解(中篇)
学习小组
加入同步学习小组,共同交流与进步。
- 方式一:关注头条号gorhaf,私信“Java学习小组”。
- 方式二:关注公众号gorhaf,回复“Java学习小组”。
全栈工程师学习计划
关注我们,加入“全栈工程师学习计划”。
版权声明
原创不易,未经允许不得转载!