java数组中的元素都是同一种类型。数组的长度再创建时确定,并且在创建后不变。如果需要建立存储不同类型数据的集合,或者要求这种数据存储结构的长度可以动态变化,可以使用java.util包中的各种集合类,如Vector等
可以声明任何类型的数组,包括基本类型和类类型的数据。数组声明和其他类型的变量声明一样,包括两个部分:数据的类型和数组的名字。数组声明语句有两种格式:
// 第一种格式
char s[];
point p[]; //point 是一个类
// 第二种格式
char[] s;
point[] p;
在Java中数组是作为类来处理的。Java中的类类型变量的声明不创建该类的对象。所以数组的声明并不创建实例数组的数据空间,而是给该数组变量分配了一个可以用来引用该数组的引用空间
数组元素所需的内存空间是通过new运算符或者通过数组初始化分配的。通过new运算符创建数组格式如下:
new elementType[arraySize];
// 例如
s = new char[20];
数组在创建后呢,其元素是被系统自动进行初始化的。对于字符数组,每个元素都被初始化为’/u0000’,而对于对象数组,每个元素都被初始化为null。在通过new实例化一个数组后,就可以对数组元素进行赋值并进行其他操作,例如
s[0] = 'a';
s[1] = 'b';
注意数组不要越界了,从0到len-1,数组在创建后在内存中布局如下,可以更好的理解
java中为所有数组设置了一个表示数组元素个数的特性变量length,它作为数组的一部分被存储卡里。Java用该变量在运行时,对数组进行越界检查。访问数组长度格式如下
arrayname.length;
数组在创建后长度是不可变的。不能去改变数组的长度。但可以使用该数组变量指向另一个全新的数组。例如:
int a[] = new int[6];
a[0] = 10;
....
a = new int[10]; // 这样a就指向另一片空间了
除了创建基本类型数组,还可以创建对象数组,例如,下列语句声明并创建了一个Point类型的数组;
Point p[];
p = new Point;
// 创建十个Point对象
for (int i = 0; i<10; i++){
p[i] = new Point(i,i+1);
}
执行了上述语句后,数字p在内存中的布局如图
Java中可以在数组声明中直接给数组赋初值。这样可以通过一条语句完成数组的声明、创建与初始化。例如
String names[] = {"jack","wang","lee"};
// 声明并创建一个有两个元素的Data类型的数组 dates
Date dates[] = {
new Date(10,9,2000),
new Date(10,9,2001);
};
Java语言的多维数组可以看作是数组的数组,即n维数组是n-1维数组的数组
多维数组的声明格式与一维数组相类似,只是要用多对[]表示数组的维度,n维就要用n个[]
多维数字的实例化可以采用多种方式,并可以构造规则数组和不规则数组
(1)直接为每一维分配内存,创建规则数组。例如:
int a[][];
a = new int [4][4];
在内存中分配如图
(2)从最高维起,分别为每一维分配空间。这种方式可以构造不规则数组。例如
int a[][] = new int [2][];
a[0] = new int[10];
a[1] = new int[5];
最高维的长度必须要先确定了
在jdk5.0以后,为了便于对数组和集合中的元素进行迭代处理,Java中引入了一种增强的for循环形式,定义如下:
for(类型 标识符: 可迭代类型的表达式) 语句;
其中,括号中的“类型 标识符” 指定了一种类型的标识符,该标识符的类型应与冒号后面的表达式的类型兼容。“可迭代类型的表达式” 一般说数组或集合,可理解为in ,例如
int[] numbers = {1,2,3,4,5,6,7,8,9,10};
for (int element : numbers) {
System.out.println(element);
}
上述可以认为说 for each element in numbers do {…}
数组变量之间赋值是引用赋值,不能实现数组数据的赋值
int a[] = new int[6];
int b[];
b = a;
如果实在想进行数据的复制,使用Java语言在java.lang.System中提供的数组赋值方法
public static void arraycopy(object source, int srcIndex, object dest, int destIndex, int length)
source — 源数组;srcIndex — 源数组开始复制的位置; dest — 目的数组; destIndex — 目的数组中开始存放复制数据的未知; length — 复制元素的个数
class ArrayCopy
{
public static void main(String[] args)
{
char[] copyFrom = {'d', 'e', 'c', 'a', 'f', 'f','e', 'i', 'n', 'a', 't','e'};
char[] copyTo = new char[7];
System.arraycopy(copyFrom, 2, copyTo,0 ,7 );
System.out.println(copyTo);
}
}