使用Java反射机制动态创建和访问数组

本文详细介绍了Java.lang.reflect包下的Array类,展示了如何使用newInstance方法动态创建数组,以及如何使用get和set方法访问和修改数组元素,包括多维数组的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值