如果程序里你需要同时存储多个同一类型的值怎么办呢?例如如果你们班有50个同学要你存储全班同学的名字怎么办?像下面这样吗?
String stuName1 = "张辽";
String stuName2 = "典韦";
String stuName3 = "许褚";
String stuName4 = "徐晃";
...
...
String stuName49 = "于禁";
String stuName50 = "乐进";
这么做简直是个灾难,变量巨多,代码巨长还巨难管理。
为了解决这种问题,于是呢,就有了数组。
什么是数组##
数组是一种用于存储多个同类型变量的数据结构,是一种线性结构,属于引用数据类型。数组的每一个数据称为<code>元素</code>,每个元素都有对应的索引(称为<code>下标</code>)用于访问该元素。
数组有两大属性:
- 元素类型
数组中的每个元素的数据类型必须是相同的。例如int数组的元素都是int,String数组的元素都是String。 - 数组长度
数组的长度就是可以存储多少个元素,这决定了数组在内存中占多少空间,它在数组初始化的时候就被确定且不可更改。
怎么使用数组##
声明一个数组有以下两种方式
- 数据类型[] 变量名; eg:<code>int[] scroes</code>
- 数据类型 变量名[]; eg:<code>int scroes[]</code>
强烈推荐使用第一种声明方式,因为数组本身就是一种数据类型,按习惯我们声明变量都是<code>数据类型 变量名</code>,所以不要把数据类型和[]拆开,这样可读性更强。
看到这里有没有恍然大悟main方法的参数<code>String[] args</code>是什么东西了?
数组的初始化也有两种方式
- 静态初始化
静态初始化指的是数组初始化的时候就指明了数组的长度和具体每个元素。
语法是:变量名 = {元素1, 元素2, 元素3, ..., 元素N}; eg:<code>scroes= {45, 56, 67, 78, 89};</code> - 动态初始化
动态初始化指只确定一个数组的长度吗,但是并不确定该数组的具体元素。
语法是:变量名 = new 数据类型[长度]; eg:<code>scroes= new int[50];</code>
这里有一点需要注意,动态初始化即使没有指定每个元素的值但是也会自动填充一个默认值。byte、short、int、long、char的默认值是0,float和double的默认值是0.0,boolean是false,引用数据类型(再次强调String是引用数据类型)的初始值都是null。
如何访问数组元素##
上面说了,数组中的每个元素分配了索引可以访问,这个索引称之为下标。下标写在[]里。例如<code>scroes[5]</code>将访问该数组的第6个元素,咦,为什么是第6个不是第5个呢?因为数组的元素下标是从0开始算的,所以如果一个数组的长度为50,那么它元素的下标是从0到49。
遍历数组##
数组的<code>length</code>属性可以获取该数组的长度。基于这个属性就可以用循环来遍历一个数组了。
示例代码:
int[] scroes = new int[50];
for (int i = 0; i < scroes.length; i++) {
scroes[i] = i + 1;
}
//System.out.println(scroes[49]); // 因为数组下标从0开始,所有长度为50的数组的最后一个元素的下标是49
运行结果:
<pre>
50
</pre>
上面的代码用动态初始化创建了一个长度为50的int数组,然后利用length属性遍历数组并把1大50赋值给每个元素,最后输出最后一个元素的值。
不知道这时你会不会好奇,如果下标超出数组长度会怎样呢?试试访问第51个元素吧。
scroes[50] = 51;
运行结果:
<pre>
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 50
at Array.main(Array.java:11)
</pre>
运行结果出错了,抛出了ArrayIndexOutOfBoundsException(数组越界)的异常。
foreach##
Java提供了一种循环语法可以很方便的用来遍历数组和集合(以后会学到)。可以看成是用for循环遍历数组/集合的简写版本。
其语法如下:
<code>
for (数据类型 变量名: 遍历对象) {
此处可以引用变量名遍历整个数组/集合的每个元素;
}
</code>
示例代码:
for (int i : scroes) {
if (i % 5 == 0) {
System.out.println(i);
}
}
运行结果:
<pre>
5
10
15
20
25
30
35
40
45
50
</pre>
本文代码下载:百度网盘
网友评论