数组用于存储元素个数固定、元素类型相同的有序集
数组的定义
定义数组的要素:
——数组长度
——元素类型
——数组变量的名称
——数组维度(支持多维数组的语言需要提供)
其中, 数组长度在数组创建时指定, 其余三要素在数组声明时指定
数组的声明
声明包含三部分:
——元素类型:基本类型或引用类型
——数组变量名称
——数组维度
一维数组的声明格式有两种,分别是
(1)元素类型[ ] 数组变量名称;
(2)元素类型 数组变量名称[ ];
例:
char s[]; char[] s; //基本类型数组
Point p[]; Point[] p; //引用类型数组
char[] s,m,n; //三个变量都是字符数组变量
数组的创建
(1)数组类型是一种引用类型,所以数组声明不分配数组的数据空间,而是创建一个对该类型数组的引用
(2)数组的数据空间可看做是一个对象实例,需要用new关键字来创建
(3)数组变量与数组对象不同,数组变量存储了对数组对象的引用
数组实例化:创建数组对象,并建立数组变量与数组对象之间的引用关系,
实例化的格式:
数组变量名称=new 元素类型[数组长度];
举例:
s = new char[20]; //创建有20个字符的数组
p = new Point[100]; //创建有100个Point引用的数组
数组的初始化
在创建数组对象时,使用元素类型的默认值对每个元素进行初始化。或者,使用以下方法进一步初始化:
(1)直接对数组的各个元素赋值,例:
Point[ ] p = new Point[100];
p[0] = new Point();
p[1] = new Point();
(2)使用数组初始化器:
String names[] = {“Jack”, “Wang”, “Lee”};
int a[] = {1, 2, 3};
Date d[] = {new Date(), new Date(), new Date()};
数组的访问
数组对象中的元素可以看作数组对象的成员变量,这些成员没有名称。所以只能通过“数组变量名称[索引值]”的方式访问
例:p[1]——访问由数组变量p指向的数组对象中索引为1的元素
索引值必须为int类型: 对于short、byte、char类型的索引值,编译器会自动将其转换为int类型
所有数组都包含表示元素个数的成员变量length
数组的复制
数组变量之间赋值是引用赋值,因此,无法通过变量赋值复制数组数据
int a[] = new int [6];
int b[];
b = a ;
正确的复制方法:
(1)使用循环语句逐个复制:
int[] target = new int[source.length];
for(int i = 0; i < source.length; i++)
target[i] = source[i];
(2)java.lang.System的静态arraycopy()方法:
System.arraycopy(Object source, int srcIndex,Object dest, int destIndex,int length);//source是被复制的数组;srcIndex是复制段起始的索引值;dest是复制的数组,length是复制段的长度
注意:dest的空间需预先分配好
例子:
public class ArrayCopyDemo {
public static void main(String[] args) {
char[] copyFrom = { 'd', 'e', 'c', 'a', 'f', 'f', 'e',
'i', 'n', 'a', 't', 'e', 'd' };
char[] copyTo = new char[7];
System.arraycopy(copyFrom, 2, copyTo, 0, 7);
System.out.println(new String(copyTo));
}
}
运行结果:
多维数组
声明:使用连续的[ ]说明数组维度,例:
int a[][];
int[][] a;
创建与初始化
需指明至少一个嵌套层的数组长度
必须从最高维指定数组长度
例:
a = new int[4][4]; //为每一维分配内存
a = new int[4][]; //为第一维分配内存, 生成不规则数组
a[0] = new int[10];
a[1] = new int[5];
...
a = new int[][4]; //不合法
多维数组中, 每一维的长度均可通过length变量获取
public class ArrayLength{
public static void main(String[] args){
int[][] a={{1,2,3,4,5},{1,2,3}};
System.out.println(a.length + “;” + a[0].length + “;”
+ a[1].length);
}
}
输出结果: