java.lang.reflect.Array 类,用于反射操纵数组,Array 类中的所有方法都是静态的。
检查某个类的类型是否是数组:Class 类中的 isArray() 方法
// 创建对象Object o = Array.newInstance(int.class, 3);boolean isArray = o.getClass().isArray; // 返回true
创建数组对象:Array.newInstance
- Object newInstance(Class<?> componentType, int arrayLength):根据指定类型和数组长度创建数组
- Object newInstance(Class<?> componentType, int… dimensions):根据指定类型和多维数组每维度的长度创建数组
// 创建一个长度为5的int数组int[] ints = (int[])Array.newInstance(int.class, 5);// 创建一个维度为5*3的字符串数组String[][] strs = (String[][])Array.newInstance(String.class, 5, 3);
获取数组的长度:Array.getLength(Object o)
// 创建数组Object o = Array.newInstance(int.class, 5);// 获取数组的长度int len = Array.getLength(o);
往数组中填充和获取元素:
- 填充数组元素:Array.set(Object array, int index, Object value) 和 一系列填充基本元素类型的方法,如 Array.setInt()、Array.setBoolean()
- 获取数组元素:Object get(Object array, int index) 和一系列的获取基本元素类型的方法,如 Array.getInt()、Array.getBoolean()
Object o = Array.newInstance(int.class, 5);// 元素填充for (int i = 0; i < Array.getLength(o); i++) {Array.set(o, i, i);}// 元素获取for (int i = 0; i < Array.getLength(o); i++) {System.out.println(Array.getInt(o, i));}
获取数组的维度:
- Class.isArray() 方法能够判断 Class 是否为 Array 对象
- Class.getComponentType() 方法能够返回数组的元素类型的 Class 对象
public static int getArrayDimension(Object arr){int dimension = 0;Class<?> clazz = arr.getClass();if (!clazz.isArray()){throw new IllegalArgumentException("Object is not a Array!");}while (clazz.isArray()){dimension++;clazz = clazz.getComponentType();}return dimension;}
对多维数组进行操作:
public static void binaryArray(){Object o = Array.newInstance(int.class, 2, 2);// 获取二维数组中的索引0上的一维数组Object o1 = Array.get(o, 0);// 给二维数组索引0的一维数组赋值Array.set(o1, 0, 13);Array.set(o1, 1, 23);// 获取元素上的值System.out.println(Array.get(o1, 0)); // 13System.out.println(Array.get(o1, 1)); // 23}
