Java反射操作数组的核心是java.lang.reflect.Array类,支持运行时创建任意类型维度数组,需用Object接收并调用类型明确的静态方法读写;创建一维数组须用Array.newInstance(componentType, length);读写元素需区分基本/引用类型方法;多维数组通过int数组声明维度,逐层get解包;检查isArray()和getComponentType()保障类型安全。

Java反射操作数组对象,核心在于 java.lang.reflect.Array 类。它不依赖编译期类型,允许在运行时按需创建任意类型、任意维度的数组,并安全读写元素——关键在于统一用 Object 接收数组实例,再通过类型明确的静态方法访问或赋值。
动态创建一维数组的正确姿势
不能直接 new,也不能靠泛型推导。必须指定元素类型(Class 对象)和长度:
- 基本类型用
Integer.TYPE、String.class等获取对应 Class;不要传int.class给引用类型数组 - 调用
Array.newInstance(componentType, length),返回值是Object,需强制转换才能当原生数组用 - 例如创建含 8 个 String 的数组:
Object arr = Array.newInstance(String.class, 8); String[] sArr = (String[]) arr;
安全读写数组元素的三类方法
对反射创建或普通数组都适用,但必须匹配元素类型:
- 读取:用
Array.get(array, index)返回Object,再强转;或对基本类型用Array.getInt(array, i)、Array.getBoolean(array, i)等专用方法 - 写入:对引用类型用
Array.set(array, index, value),value 必须是 Object 或其子类;对基本类型用Array.setInt(array, i, 123)等 - 获取长度统一用
Array.getLength(array),无需关心是否为基本类型数组
多维数组的创建与逐层解包
不是嵌套调用,而是用 int 数组一次性声明各维长度:
立即学习“Java免费学习笔记(深入)”;
- 创建三维 int 数组:
Object arr3d = Array.newInstance(int.class, 2, 3, 4);—— 等价于int[2][3][4] - 访问
arr3d[1][2][3]需分三步:Object layer1 = Array.get(arr3d, 1);→Object layer2 = Array.get(layer1, 2);→int val = Array.getInt(layer2, 3); - 赋值同理,最后一层用
Array.setInt;中间层仍是Object类型,不可直接强转为int[],除非确认维度已到底
数组类型检查与安全转换
避免 ClassCastException 是反射操作数组的关键防护点:
- 用
array.getClass().getComponentType()获取元素类型,判断是基本类型还是引用类型 - 用
Array.getLength()替代.length,防止空指针或非数组对象误用 - 强制转换前先校验:
if (arr.getClass().isArray()) { int[] safe = (int[]) arr; }


















