1创建和使用数组
1.1数组的定义
1 声明数组:声明数组名称和元素的数据类型。
2 创建数组:为元素分配储存空间。
3 数组的初始化:为元素赋值。
1.2 声明数组
使用数组之前需要声明,声明数组就是告诉编译器数组名和数组元素类型。数组声明可以用以下两种形式:
elementType []arrayName;
elementType arrayName[];
这里,elementType为元素类型,可以是基本数据类型(例如boolean型或者char型),也可以是引用数据类型(如String或Employee类型等);arrayName为数组名,它是引用变量;方括号指明变量为数组变量,既可以放在变量前也可以放在变量后面,推荐放在变量前面,这样更直观。
例如:
double []marks;
String []words;
注意:数组声明不能指定数组元素的个数,这一点与c/c++不同。
上面声明的数组,他们的元素类型分别为double 和String 型。在java中,数组是引用数据类型,也就是说数组是一个对象,数组名就是对象名(或引用名)。数组声明实际上是声明一个引用变量。如果数组元素都为引用类型,则该数组称为对象数组,如上面的words就是对象数组。所有数组都继承了Object类,因此,可以调用Object类的所有方法。
1.3 创建数组
数组声明仅仅声明一个数组对象引用,而创建数组是为了数组的每个元素分配储存空间。创建数组使用new语句,一般格式为:
arrayName = new elementType[arraSize];
该语句功能是分配arrySize个elementType类型的储存空间,并通过arrayName 来引用。例如:
marks = new double[5]; //数组包含5个double元素
words = new String[3]; //数组包含3个String元素
注意:Java数组的大小可以在运行时指定,这一点c/c++不允许。
数组的声明与创建可以写在一个语句中。例如:
double []marks = new double[5];
String []words = new String[3];
当用new 运算符创建一个数组时,系统就为数组元素分配了储存空间,这时系统根据指定长度创建若干储存空间并为数组每个元素指定默认值。对数值型元素默认值是0;字符型的默认值是'\u000';布尔类型元素的默认值是false;如果数组元素是引用类型,其默认值是null。
1.4 访问数组元素
声明了一个数组,并使用new运算符为数组元素分配内存空间后,就可以使用数组中每一个元素。数组元素的使用方法是:
arrayName[index]
其中,index为数组元素下标或索引,下标从0开始,从数组的长度减1。例如,上面定义的words数组定义了三个元素,所以只能使用words[0],words[1]和words[2]这三个元素。数组一经创建大小不能改变。
数组作为对象提供了一个length成员变量,它表示数组元素的个数,访问该成员变量方法为arrayName.length.
下面程序演示了数组的使用和length成员的使用。
ArrayDemo.java
packge com.demo;
public class ArrayDemo{
public static void main(String[] args){
double [] marks = new double[5];
marks[0] = 79;
marks[1] = 84.5;
marks[2] = 63;
marks[3] = 90;
marks[4] = 98;
System.out.println(marks[2]);
System.out.println(marks.length);
//输出每个元素值
for(int i= 0; i< marks.length;i++){
System.out.printlin(marks[i] + " " );
}
}
}
运行结果为:
63.0
5
79.0 84.5 63.0 90.0 98.0
为保证安全性,java运行时系统要对数组元素的范围进行越界检查,若数组元素下标超出范围,运行将抛出 ArrayTndexOutOfBoundsException 异常。例如,下面代码抛出异常。
System.out.println(marks[5]);
1.5 数组初始化器
声明数组同时可以使用初始化器对数组元素初始化,在一对大括号中给出数组的每个元素值。这种方式适合数组元素较少的情况,这种初始化也称为静态初始化。
double[] marks = new double[] {79,84.5, 63, 90,98 };
double[] words = new double[]{"java","is", "cool"};
用这种方法创建数组不能确定大小,系统根据元素个数确定数组大小。另外可以在最后一个元素加一个逗号,以方便扩充。
以上两句还可以写成如下更简便形式:
double[] marks={79, 84.5, 63, 90, 98};
String[] words={"java", "is", “cool”};
1.6 增强的for循环
如果程序只需要顺序访问数组中每个元素,可以使用增强的for循环,它是java 5 新增功能。增强for循环可以使用来迭代数组和对象合集的每个元素。它的一般格式为:
for(type identifier: expression){
//循环体
}
该句循环的含义为:对expression(数组或集合)中每一个元素identifier,执行一次循环体的语句。这里,type 为数组或集合中元素类型;expression 必须是一个数组或集合对象。
下面使用增强的for循环实现数组marks中各元素的和,代码如下:
double sum= 0;
for(double score : marks){
sum = sum + score;
}
System.out.println("总成绩=” + sum);
2 二维数组
二维数组的使用也分为声明,创建和初始化三个步骤。
2.1 二维数组声明
二维数组声明有下面三种等价的声明格式:
elementType[] [] arrayName;
elementTypr [] arrayName;
elementType arrayName[] [];
这里,elementType 为数组元素的类型,arrayName 为数组名。推荐使用第一种方法声明二维数组。下面语句声明了一个整形二维数组 matrix 和 一个String 型二数组 cities.
int [] [] matrix;
String [] [] cities;
2.2 创建数组创建数组就是为二维数组的每个元素分配储存空间。系统先为高维分配引用空间,然后再顺次为低维分配空间。二维数组创建也使用new运算符,分配空间有两种方式,下面是直接为每一维度分配空间。
int [] ][] marks = new int [2][3]; // 直接为每一维分配空间
这种方法适用于数组的低维具有相同个数的数组元素。在java中,二维数组是数组的数组,即数组元素也是一个数组。
创建了二维数组后,它的每个元素被指定为默认值。上述语句执行后,数组matrix的6个元素值都被初始化为0。
在创建二维数组时,也可以为第一维数组分配空间,然后为第二维分配空间。
int [] [] matrix = new int [2] []; //先为第一维分配空间
matrix [0] = new int [3]; //再为第二维分配空间
matrix [1] = new int [3];
2.3 数组元素的使用
访问二维数组的元素,使用下面的形式:
arrayName[index1] [index2]
其中index1和index2为数组元素下标,可以是长整形常数或表达式。同样,每一维的下标也是从0到该维的长度减1.、下面饭吗给matrix数组元素赋值:
matrix[0] [0] = 80;
matrix[0] [1] = 75;
matrix[0] [2] = 78;
matrix[1] [0] = 67;
matrix[1] [1] = 87;
matrix[1] [2] = 98;
下面代码输出matrix[1] [2]元素值:
System.out.println(matrix[1][2]);
与访问一维数组一样,访问二维数组元素时,下标也不能超过范围,否则抛出异常,可以使用 ,matrix.length 得到数组大小,结果为2;用martix[0].length 得到martix[0]数组大小,结果为3.
对二维数组的第一维数组通常称为行,第二行称为列。要访问二维数组所有元素,应该使用嵌套的for循环。如下面代码输出matrix数组中所有元素。
for(int i=0;i< matrix.length; i++){
for(int j=0; j<matrix[0].length;j++){
System.out.println(matrix[i][j] +" ");
}
System.out.printlin(); //换行
}
同样,在访问二维数组元素的同时,可以对元素处理,如计算机行的和或列的和等。
2.4 数组初始化器
对于二维数组也可以使用初始化器在声明数组的同时为数组元素初始化。例如:
int [] [] matrix = {{15,56,20,-2},
{10,80,-9,31},
{76,-3,99,21},};
matrix 数组是3行4列的数组。多维数组每一维也都有一个length成员表示数组长度。matrix.length的值是3,matrix[0].length的值是4.