Java中的反射机制(三) 反射与数组
反射与数组
java.lang.Array类提供了动态创建和访问数组元素的各种静态方法。
例程ArrayTester1类的main()方法创建了一个长度为10的字符串数组,接着把索引位置为5的元素设为“hello”,然后再读取索引位置为5的元素的值。
import java.lang.reflect.Array; public class ArrayTester1 { public static void main(String[] args) throws Exception { Class<?> classType = Class.forName("java.lang.String"); //生成数组,指定元素类型和数组长度 Object array = Array.newInstance(classType, 10); Array.set(array, 5, "hello"); String str = (String)Array.get(array, 5); System.out.println(str); } }
多维数组
首先,区别一下下面两者:
System.out.println(Integer.TYPE); System.out.println(Integer.class);
输出:
int
class java.lang.Integer
一个多维数组的程序实例:
import java.lang.reflect.Array; public class ArrayTester2 { public static void main(String[] args) { int[] dims = new int[] { 5, 10, 15 }; // 注意区分下面两种 System.out.println(Integer.TYPE); // int System.out.println(Integer.class); // Integer // 创建一个三维数组,这个数组的三个维度分别是5,10,15 Object array = Array.newInstance(Integer.TYPE, dims); // 可变参数,也可以这样写: // Object array = Array.newInstance(Integer.TYPE, 5,10,15); System.out.println(array instanceof int[][][]); Class<?> classType0 = array.getClass().getComponentType(); // 返回数组元素类型 System.out.println(classType0); // 三维数组的元素为二维数组,输出:class [[I // 获得第一层的索引为3的数组,返回的是一个二维数组 Object arrayObject = Array.get(array, 3); Class<?> classType = arrayObject.getClass().getComponentType(); // 返回数组元素类型 System.out.println(classType); // 二维数组的元素为一维数组,输出:class [I // 此处返回的是一个一维数组 arrayObject = Array.get(arrayObject, 5); Class<?> classType2 = arrayObject.getClass().getComponentType(); // 返回数组元素类型 System.out.println(classType2); // 一维数组的元素为int // 给一维数组下标为10的位置设置值为37 Array.setInt(arrayObject, 10, 37); int[][][] arrayCast = (int[][][]) array; System.out.println(arrayCast[3][5][10]); } }
参考资料
张龙老师Java SE教学视频。
文档链接:
Array:
http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Array.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了