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)); // 13
System.out.println(Array.get(o1, 1)); // 23
}