Java反射04 : 通过Array动态创建和访问Java数组
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java反射04 : 通过Array动态创建和访问Java数组,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6690字,纯文字阅读大概需要10分钟。
内容图文
![Java反射04 : 通过Array动态创建和访问Java数组](/upload/InfoBanner/zyjiaocheng/667/edcfe44335b14cc59ae70717a158c796.jpg)
java.lang.reflect.Array类提供了通过静态方法来动态创建和访问Java数组的操作。
本文转载自:https://blog.csdn.net/hanchao5272/article/details/79416263
1.主要的静态方法
java.lang.reflect.Array提供以下几类静态方法操作:
- Array.newInstance() :创建引用类型的数组
- Array.set()和Array.get() :根据索引,设置和获取指定数组(所有类型的数组)元素的值。
- Array.setXxxx()和Array.getXxxx() :根据索引,设置和获取指定数组(基本数据类型的数组)元素的值。
- Xxxx :8中基本数据类型 boolean/char/float/double/byte/int/short/long
示例代码如下:
1 /** 2 * java.lang.reflect.Array示例 3 */ 4 public class ReflectArrayDemo { 5 private final static Logger LOGGER = Logger.getLogger(ReflectArrayDemo.class); 6 7 /** 8 * <p>Title: java.lang.reflect.Array示例</p> 9 */ 10 public static void main(String[] args){ 11 /* 12 static Object newInstance(Class<?> componentType, int dimensions) 13 */ 14 LOGGER.info("利用Array.newInstance创建一维数组"); 15 //利用Array.newInstance创建一维数组 16 int rows = 3; 17 int cols = 2; 18 Integer[] array = (Integer[]) Array.newInstance(Integer.class,rows); 19 //static void set(Object array, int index, Object value) 20 //通过Array.set设置数组的值 21 LOGGER.info("通过Array.set设置数组的值"); 22 Array.set(array,0,110); 23 Array.set(array,1,119); 24 Array.set(array,2,120); 25 //下面语句运行报错IllegalArgumentException: Argument is not an array 26 //因为array是引用类型的数组 27 // Array.setInt(array,2,120); 28 //static Object get(Object array, int index) 29 //通过Array.get获取数组的值 30 LOGGER.info("通过Array.get获取数组的值"); 31 for(int i = 0; i < 3; i++) { 32 LOGGER.info(Array.get(array,i)); 33 } 34 35 /* 36 static Object newInstance(Class<?> componentType, int length) 37 */ 38 LOGGER.info("利用Array.newInstance创建多维数组"); 39 //利用Array.newInstance创建多维数组 40 Double[][] arraymn = (Double[][]) Array.newInstance(Double.class,rows,cols); 41 Array.set(arraymn[0],0,1D); 42 Array.set(arraymn[0],1,2D); 43 Array.set(arraymn[1],0,11D); 44 Array.set(arraymn[1],1,12D); 45 Array.set(arraymn[2],0,21D); 46 Array.set(arraymn[2],1,22D); 47 for(Double[] arrayn : arraymn ){ 48 for (Double item : arrayn){ 49 LOGGER.info(item); 50 } 51 } 52 53 /* 54 基本类型数组操作 55 static void setInt(Object array, int index, int i) 56 static double getDouble(Object array, int index) 57 8中基本类型:boolean/char/float/double/byte/int/short/long 58 */ 59 LOGGER.info("Array.setXxxx和Array.getXxxx"); 60 int[] ints = new int[3]; 61 LOGGER.info("通过Array.setInt设置int基本数据类型的数据"); 62 Array.setInt(ints,0,110); 63 Array.setInt(ints,1,110); 64 Array.setInt(ints,2,110); 65 for(int i = 0; i < 3; i++) { 66 LOGGER.info("通过Array.getDouble获取double基本数据类型的数据:" + Array.getDouble(ints,i)); 67 } 68 } 69 }
运行结果:
1 INFO ReflectArrayDemo:22 - 利用Array.newInstance创建一维数组 2 INFO ReflectArrayDemo:29 - 通过Array.set设置数组的值 3 INFO ReflectArrayDemo:38 - 通过Array.get获取数组的值 4 INFO ReflectArrayDemo:40 - 110 5 INFO ReflectArrayDemo:40 - 119 6 INFO ReflectArrayDemo:40 - 120 7 INFO ReflectArrayDemo:46 - 利用Array.newInstance创建多维数组 8 INFO ReflectArrayDemo:57 - 1.0 9 INFO ReflectArrayDemo:57 - 2.0 10 INFO ReflectArrayDemo:57 - 11.0 11 INFO ReflectArrayDemo:57 - 12.0 12 INFO ReflectArrayDemo:57 - 21.0 13 INFO ReflectArrayDemo:57 - 22.0 14 INFO ReflectArrayDemo:67 - Array.setXxxx和Array.getXxxx 15 INFO ReflectArrayDemo:69 - 通过Array.setInt设置int基本数据类型的数据 16 INFO ReflectArrayDemo:74 - 通过Array.getDouble获取double基本数据类型的数据:110.0 17 INFO ReflectArrayDemo:74 - 通过Array.getDouble获取double基本数据类型的数据:110.0 18 INFO ReflectArrayDemo:74 - 通过Array.getDouble获取double基本数据类型的数据:110.0
总结:
1.Array.newInstance()
可以通过Array.newInstance()创建多维引用类型的数组,有以下两个静态方法。
注意是引用类型(因为需要参数Class<?> componentType决定数组类型)
1 //一维数组 2 public static Object newInstance(Class<?> componentType, int length) 3 //多维数组 4 public static Object newInstance(Class<?> componentType, int... dimensions)
代码示例:
1 Integer[] array = (Integer[]) Array.newInstance(Integer.class, rows); 2 Double[][] arraymn = (Double[][]) Array.newInstance(Double.class, rows, cols);
2,Array.set()和Array.get()
可以通过Array.set()和Array.get()进行数组元素的取值和写入,可以操作引用类型数组,也可以操作基本类型数组。
set和get方法如下:
1 public static native void set(Object array, int index, Object value) 2 public static native Object get(Object array, int index)
注意:Array.set()和Array.get()是本地(native)方法,关于本地方法参考:[Java的native方法]
(http://blog.csdn.net/hanchao5272/article/details/79361922)
代码示例:
1 //引用类型数组的get和set操作 2 Integer[] array = (Integer[]) Array.newInstance(Integer.class,rows); 3 Array.set(array,0,110); 4 Array.get(array,i) 5 //基本数据类型的get和set操作 6 int[] ints = new int[3]; 7 Array.set(ints,2,110); 8 Array.get(ints,0)
3.Array.setXxxx()和Array.getXxxx()
可以通过Array.setXxxx()和Array.getXxxx()进行基本类型数组元素的取值和写入,引用类型数组不可用。
这里的Xxxx。指的是基本数据类型:boolean/char/float/double/byte/int/short/long。拿boolean和int举例,其静态方法如下:
1 public static native boolean getBoolean(Object array, int index) 2 public static native void setBoolean(Object array, int index, boolean z) 3 4 public static native int getInt(Object array, int index) 5 public static native void setInt(Object array, int index, int i)
注意:Array.setXxxx()和Array.getXxxx()是针对基本数据类型的操作。
注意:Array.setXxxx()和Array.getXxxx()是本地(native)方法,关于本地方法参考:Java的native方法
代码示例:
1 //引用类型数组 2 Integer[] array = (Integer[]) Array.newInstance(Integer.class, rows); 3 /* 4 下面语句运行报错IllegalArgumentException: Argument is not an array 5 因为array是引用类型的数组 6 */ 7 //Array.setInt(array,2,120); 8 /* 9 下面语句运行报错IllegalArgumentException: Argument is not an array 10 因为array是引用类型的数组 11 */ 12 //LOGGER.info(Array.getInt(array,2));
如果使用Array.setXxxx()和Array.getXxxx()会产生如下错误:
1 Exception in thread "main" java.lang.IllegalArgumentException: Argument is not an array 2 at java.lang.reflect.Array.getInt(Native Method) 3 at pers.hanchao.reflect.array.ReflectArrayDemo.main(ReflectArrayDemo.java:48)
内容总结
以上是互联网集市为您收集整理的Java反射04 : 通过Array动态创建和访问Java数组全部内容,希望文章能够帮你解决Java反射04 : 通过Array动态创建和访问Java数组所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。