对于创建非数组实例,可以看这篇文章 : Java反射 - [实例演示] 创建类的对象多种方式
一、Java.lang.reflect.Array ’ API
public static Object newInstance(Class<?> componentType, int length)
创建具有指定组件类型和长度的新数组
其中,第一个参数与Class类中的getComponentType()方法
结合使用。这个方法返回数组的成员类型,如果此类成员类型不是数组,则返回null
public static Object get(Object array, int index)
返回指定数组对象中索引的值。若该对象的值是基本数据类型,则将改制自动装箱
public static int getLength(Object array)
返回指定数组的长度
public static void set(Object array, int index, Object value)
将指定数组对象的索引组件的值设置为指定的新值。 如果数组的值是基本数据类型,则新值将首先被自动拆箱
二、创建数组实例
public class ReflectTest{
public static void main(String[] args) {
String[] strArr = (String[]) Array.newInstance(String[].class.getComponentType(), 10);
System.out.println(Arrays.toString(strArr));
}
}
输出 :
[null, null, null, null, null, null, null, null, null, null]
多维数组的创建以及赋值
三、实例分析
- 通过Array.newInstance方法创建的实例,默认返回Object类型。因为所有类的父类都是Object,所以数组也是Object类型。可以通过强制转换来得到真正想要的类型。
int i = (int) Array.get(intArr, 3);
经过反编译后为int i = (Integer)Array.get(intArr, 3);