对于创建非数组实例,可以看这篇文章 : 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);