数组是一个固定长度的数据结构,用于保存多个相同数据类型的值。在数据类型之后或在变量声明中的变量名称之后放置[]
,使变量成为数组。
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-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;
数组的类名以左中括号[
开头。左括号的数量等于数组的维数。