java反射操作数组核心依赖java.lang.reflect.array类,所有操作基于class对象和运行时维度信息,返回object需强转或调用专用方法;一维数组须用array.newinstance创建并用array.set/get操作;多维数组需逐层array.get访问;读写前须用isarray()和getcomponenttype()判断类型,基本类型必须用getint等专用方法,长度统一用getlength。

Java 反射创建和操作数组,核心靠 java.lang.reflect.Array 类。它不依赖编译期类型,所有操作都基于 Class 对象和运行时维度信息,返回值统一为 Object,后续需按需强转或调用专用方法。
一维数组的动态创建与赋值
不能用 new String[10] 或泛型推导,必须明确指定元素类型和长度:
- 获取元素类型:引用类型用
String.class,基本类型用int.class、Integer.TYPE(二者等价) - 创建数组:
Object arr = Array.newInstance(String.class, 5); - 赋值:
Array.set(arr, 2, "hello");—— 第三个参数必须是Object或其子类 - 取值:
String s = (String) Array.get(arr, 2);,或对基本类型直接用Array.getInt(arr, 0)
多维数组的声明与逐层访问
不是嵌套调用,而是用 int[] 一次性描述各维长度:
- 创建三维
double数组:Object arr3d = Array.newInstance(double.class, 2, 3, 4); - 访问
arr3d[1][2][3]需三步:Object layer1 = Array.get(arr3d, 1);→Object layer2 = Array.get(layer1, 2);→double val = Array.getDouble(layer2, 3); - 中间层始终是
Object,不可直接强转为double[],除非确认已到最内层
安全读写与类型检查
避免 ClassCastException 和空指针的关键防护点:
- 判断是否为数组:
obj.getClass().isArray() - 获取元素类型:
obj.getClass().getComponentType(),再用.isPrimitive()区分基本/引用类型 - 读写分支处理:若为基本类型,必须用
Array.getInt()等专用方法;引用类型才可用Array.get()/set() - 获取长度统一用
Array.getLength(arr),兼容所有数组类型
原始类型数组的特殊处理
int[]、boolean[] 等不是 Object[] 的子类,不能用通用数组方式访问:
- 创建后不能当作
Object[]强转并用下标访问,会抛ClassCastException - 必须全程使用
Array.setInt(arr, i, 123)、Array.getBoolean(arr, j)等配套方法 - 若封装通用容器,内部应先判断
getComponentType().isPrimitive(),再路由到对应操作逻辑
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











