一、学习要求
书籍参考章节: 第3.10章节
学习目标:
- 掌握数组的基本概念
- 数组的定义和初始化
- 数组的操作
二、参考知识
数组是用来存储一组相同类型的数据。可以创建任意类型的数组。并且数组可以是一维或多维的。另外需要注意的是,数组不是简单类型,它是对象类型。下面来详细介绍。
基本概念
我们先看一个简单例子:
public class Demo {
public static void main(String[] args) {
//声明了一个 整型数组,并创建数组对象,指定长度为10
int[] a = new int[10];
for(int i=0;i<10;i++){
//设置数组元素的值
a[i] = i*2;
}
for(int j=0;j<10;j++){
//获取数组元素的值
int value = a[j];
System.out.println(value);
}
}
}
上面简单例子包含了数组变量的声明、数组对象的创建、数组元素的访问。下面我们一一来详细描述。
数组变量的声明
数组变量声明的语法是:
数据类型[] 数组变量; 或 数据类型 数组变量[];
下面是合法的数组声明:
int[] a;
int a[];
Object[] objs;
Object arr[];
也就是说,[]既可以放在变量名的前面,也可放在变量名的后面,且[]与前后的类型名或变量名之间可以有空格,也可以没有空格。
注意声明数组变量时不能指定数组的长度。如下面的数组声明是非法的。
int values[10];
数组对象的创建
java中使用关键字new创建数组对象,格式为:
数组变量名 = new 数组元素的类型 [数组元素的个数];
注意这里的类型必须与声明的类型一致。如:
int [] a;
a = new int[10]; //创建数组对象,赋值给变量a
a = new int[20]; //创建新的数组对象,给变量a重新赋值
也可以把声明和赋值语句合一,如:
int[] a = new int[10];
注意,数组的长度是在创建数组对象时设置的,而且必须要设置。而且,创建数组对象后,数组的长度是不能改变的。
数组对象的隐式创建
在实际编码中,除了显示的通过new操作符创建数组对象外,我们还可以通过直接初始化的方法隐式的创建数组对象。如:
int[] a = {1,2,3};
上面语句声明并实例化了一个整型数组,长度为3,元素的值就是{}中的3个整数。
String[] values={"my","name","is"};
上面语句声明并实例化了一个字符串数组,长度为3,元素的值就是{}中的3个字符串。
通过这种方式,定义的数组,我们后面可以改变元素值,但不能改变数组的长度,如:
int[] a = {1,2,3};
a[2]=5; //合法的,将第3个元素的值由初始值3改为5
a[3]=1; //运行时抛数组越界异常
数组的初始化
对于通过new操作符创建的数组对象,创建后,在没有给其中的数组元素赋值前,系统会自动根据数组类型给其中的数组元素一个默认值。
如下面表格:
数组类型 | 元素默认值 | 例子 |
---|---|---|
byte,short,int,long | 0 | int[] a = new int[10]; |
float , double | 0.0 | float[] a = new float[10]; |
char | 0 | char[] a = new char[10]; |
boolean | false | boolean[] a = new boolean[10]; |
对象类型 | null | String[] strs = new String[10]; |
数组元素的访问
java中数组是一个有序的、有长度限制的数据集合。可以通过下标获取或设置数组中的元素值,注意下标是从0开始,下标的最大值为数组长度减1;如果下标越界,运行时会报ArrayIndexOutOfBoundsException异常。文章开头的例子已经演示了如何使用。
另外数组的长度可以通过其length属性获取,如:
public void show(int[] a){
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
}
上面代码用数组的length属性获取了数组的长度,利用数组下标的方式循环获取每个元素的值。
除了上述常规的利用数组下标获取元素值外,在需要遍历数组的每个元素值时,利用for循环的另外一种使用方式(一般称为for -each方式)会更加简单。代码如:
public void show(int[] a){
for(int value:a){
System.out.println(value);
}
}
其语法格式就是 for(数据类型 元素变量名 : 数组变量) 。可以看出,这种遍历方式的代码更加简洁和方便,而且不易出错。
空数组
最后我们介绍下空数组,空数组指该数组的元素个数为0。但需要强调的是,空数组仍然是个java对象,它与null不同。
创建空数组的方式如:
int[] a = new int[0];
注意长度必须填0,不能这样写:int[] a = new int[ ]; 这样编译无法通过。
对于空数组,调用length属性,获取的值为0。用for-each去遍历空数组,是完全没问题的,只不过不会进入循环罢了。如:
public void show(){
int[] a = new int[0];
System.out.println(a.length); //输出为0
for(int value:a){ //不会进入循环
System.out.println(value);
}
}
小结
本篇文章,我们详细介绍了数组的概念和使用。对于java数组,需要牢记如下几点:
(1)数组是对象类型,不是简单类型。
(2)数组是有长度的,而且数组对象创建后长度不能改变。
(3)根据下标取数组元素时,第一个元素的下标为0
下一篇文章我们将介绍多维数组的概念和使用。