java.lang.reflect包提供了一个Array类,使用Array类可以动态地创建和访问数组。
static newInstance(Class<?> componentType, int length)方法可创建数组。componentType用以指定数组的元素类型,length用以指定数组长度。该方法返回一个Object,可考虑使用强制转换。
static native xxx getXxx(Object array, int index)方法可获取数组某一元素。array用以指定数组,index用以指定元素下标。xxx表示int和short等基本类型,若是引用类型的数组,则应去掉xxx。
static native void setXxx(Object array, int index, xxx val)方法可为数组某一元素赋值。array用以指定数组,index用以指定要赋值的元素的下标,val为要赋的值。该方法同样返回一个Object,可考虑使用强制转换。
备注:使用反射创建对象,效率较低
String[] arr = (String[]) Array.newInstance(String.class, 2); System.out.println(Arrays.toString(arr)); Array.set(arr, 0, "first"); Array.set(arr, 1, "two"); String first = (String) Array.get(arr, 0); String two = (String) Array.get(arr, 1); int length = Array.getLength(arr); System.out.println(first + " " + two);
上述示例代码对应输出为:
[null, null]
first two
数组arr的长度为: 2
Array类支持多维数组
static Object newInstance(Class<?> componentType, int... dimensions)
下述代码创建了一个三维数组,thirdArr有4个元素,每个元素又都是一个数组,各有5个元素。同样的,这5个元素也是数组,每个数组有4个元素。
Object thirdArr = Array.newInstance(int.class, 4, 5, 4); Object firstArr = Array.get(thirdArr, 3); Array.set(firstArr, 2, new int[] {5, 6}); Object secArr = Array.get(firstArr, 4); Array.set(secArr, 1, 2); Array.set(secArr, 3, 9); int[][][] strArr = (int[][][]) thirdArr; System.out.println(strArr[3][2][0]); System.out.println(strArr[3][2][1]); System.out.println(strArr[3][4][1]); System.out.println(strArr[3][4][3]);
上述代码分别输出5 6 2 9