数组是什么?
数组是一个固定长度的数据结构,用于保存多个相同数据类型的值。在数据类型之后或在变量声明中的变量名称之后放置[]
,使变量成为数组。
例如,
int myID;
上面是一个简单的变量声明。 这里,int
是数据类型,myID
是变量名。
数组声明
上面的这个声明意味着myID
变量可以保存一个整数值。如果要声明数组,可在上面的声明中的数据类型之后放置[]
,如下所示 -
int[] myID;
使myID
是一个数组变量。上面的声明应叫作“myID
是一个int
数组”。可以通过在变量名之后放置[]
来使myID
变量成为一个数组,像这样:
int myID[];
上述两个声明都是有效的。
不能在声明数组时指定数组可以保存的值的数量。可以声明一个数组来保存同数据类型的多个值。 以下是其它形式的数组声明示例:
// salary can hold multiple float values
float[] salary;
// name can hold multiple references to String objects
String[] name;
// emp can hold multiple references to Employee objects
Employee[] emp;
创建数组
数组创建的一般语法如下:
以下代码创建Arraylength
长度类型为ArrayDataType
的数组对象
new ArrayDataType[Arraylength];
要创建一个数组来存储5
个int
类型的值:
new int[5];
在此表达式中,5
是数组的长度,它也称为数组的维度。有多个维度的数组称为多维数组。还可以将数组的声明及其创建在一个语句中组合。
int[] myID = new int[5];
因为所有数组都是对象,所以它们的引用可以分配给对象类型的引用变量。 例如,
int[] myID = new int[5]; // Create an array object
Object obj = myID; // A valid assignment
显式数组初始化
当声明数组或使用new
运算符创建数组对象时,可以显式初始化数组的元素。元素的初始值由逗号分隔,并用大括号{}
括起来。
// Initialize the array at the time of declaration
int[] myID = {1, 2, 3, 4, 5};
此代码创建长度为5
的int数组,并将其元素初始化为1
,2
,3
,4
和5
。数组的长度与数组初始化列表中指定的值的数量相同。逗号跟随初始化列表中每个值直到最后一个值。
// A comma after the last value 5 is valid.
int[] myID = {1, 2, 3, 4, 5, };
或者,可以初始化数组的元素,如下所示:
int[] myID = new int[]{1, 2, 3, 4, 5};
对于引用类型数组,可以指定初始化列表中的对象列表。以下代码说明了String
的数组初始化。
String[] names = {new String("A"), new String("B")};
或
String[] names = {"C", "D"};
增强for循环数组
可以使用for-each
循环与数组。语法如下:
for(DataType e : array) {
}
以下代码使用for-each
循环打印int
数组的所有元素:
int[] numlist = {1, 2, 3};
for(int num : numlist) {
System.out.println(num);
}
可以使用基本的for
循环完成同样的事情,如下:
int[] numlist = {1, 2, 3};
for(int i = 0; i < numlist.length; i++) {
int num = numlist[i];
System.out.println(num);
}
数组对象的类
数组是对象。Object
类中的getClass()
方法返回类的引用。
以下代码说明如何获取数组的类名。
public class Main {
public static void main(String[] args) {
int[] iArr = new int[1];
int[][] iiArr = new int[1][1];
int[][][] iiiArr = new int[1][1][1];
String[] sArr = { "A", "B" };
String[][] ssArr = { { "A" }, { "B" } };
String[][][] sssArr = {}; // A 3D empty array of string
// Print the class name for all arrays
System.out.println("int[]:" + getClassName(iArr));
System.out.println("int[][]:" + getClassName(iiArr));
System.out.println("int[][][]:" + getClassName(iiiArr));
System.out.println("String[]:" + getClassName(sArr));
System.out.println("String[][]:" + getClassName(ssArr));
System.out.println("String[][][]:" + getClassName(sssArr));
}
public static String getClassName(Object obj) {
Class c = obj.getClass();
String className = c.getName();
return className;
}
}
上面的代码生成以下结果。
int[]:[I
int[][]:[[I
int[][][]:[[[I
String[]:[Ljava.lang.String;
String[][]:[[Ljava.lang.String;
String[][][]:[[[Ljava.lang.String;
数组的类名以左中括号[
开头。左括号的数量等于数组的维数。