JAVA 反射创建数组和操作数组的意义
来源:互联网 发布:淘宝店铺招牌添加链接 编辑:程序博客网 时间:2024/05/06 03:51
Java反射技术除了可以在运行时动态地决定要创建什么类型的对象,访问哪些成员变量,方法,还可以动态地创建各种不同类型,不同维度的数组。
动态创建数组的步骤如下:
1.创建Class对象,通过forName(String)方法指定数组元素的类型
2.调用Array.newInstance(Class, length_of_array)动态创建数组
访问动态数组元素的方法和通常有所不同,它的格式如下所示,注意该方法返回的是一个Object对象
Array.get(arrayObject, index)
为动态数组元素赋值的方法也和通常的不同,它的格式如下所示, 注意最后的一个参数必须是Object类型
Array.set(arrayObject, index, object)
动态数组Array不单可以创建一维数组,还可以创建多维数组。步骤如下:
1.定义一个整形数组:例如int[] dims= new int{5, 10, 15};指定一个三维数组
2.调用Array.newInstance(Class, dims);创建指定维数的数组
访问多维动态数组的方法和访问一维数组的方式没有什么大的不同,只不过要分多次来获取,每次取出的都是一个Object,直至最后一次,赋值也一样。
动态数组Array可以转化为普通的数组,例如:
Array arry = Array.newInstance(Integer.TYPE,5);
int arrayCast[] = (int[])array;
以下实例默认已经默认导入Array:import java.lang.reflect.Array;
【2】示例代码A. 一维数组:
B. 多维数组:
JAVA 反射创建数组和操作数组的意义
数组是Java编程语言中的对象。与所有对象一样,它们都有类。如果您有一个数组,使用标准 getClass 方法,您可以获得该数组的类,就象任何其它对象一样。但是, 不通过现有的实例来获得类不同于其它类型的对象。即使您有一个数组类,您也不能直接对它进行太多的操作 -- 反射为标准类提供的构造函数接入不能用于数组,而且数组没有任何可接入的字段,只有基本的 java.lang.Object 方法定义用于数组对象。数组的特殊处理使用 java.lang.reflect.Array 类提供的静态方法的集合。该类中的方法使您能够创建新数组,获得数组对象的长度,读和写数组对象的索引值。
下面显示了一种重新调整现有数组大小的有效方法。它使用反射来创建相同类型的新数组,然后在返回新数组之前,在老数组中复制所有数据。
通过反射来扩展一个数组:
动态创建数组的步骤如下:
1.创建Class对象,通过forName(String)方法指定数组元素的类型
2.调用Array.newInstance(Class, length_of_array)动态创建数组
访问动态数组元素的方法和通常有所不同,它的格式如下所示,注意该方法返回的是一个Object对象
Array.get(arrayObject, index)
为动态数组元素赋值的方法也和通常的不同,它的格式如下所示, 注意最后的一个参数必须是Object类型
Array.set(arrayObject, index, object)
动态数组Array不单可以创建一维数组,还可以创建多维数组。步骤如下:
1.定义一个整形数组:例如int[] dims= new int{5, 10, 15};指定一个三维数组
2.调用Array.newInstance(Class, dims);创建指定维数的数组
访问多维动态数组的方法和访问一维数组的方式没有什么大的不同,只不过要分多次来获取,每次取出的都是一个Object,直至最后一次,赋值也一样。
动态数组Array可以转化为普通的数组,例如:
Array arry = Array.newInstance(Integer.TYPE,5);
int arrayCast[] = (int[])array;
以下实例默认已经默认导入Array:import java.lang.reflect.Array;
【2】示例代码A. 一维数组:
public static void main(String args[]) throws Exception {Class<?> classType = Class.forName("java.lang.String");// 创建一个长度为10的字符串数组Object array = Array.newInstance(classType, 10);// 把索引位置为5的元素设为"hello"Array.set(array, 5, "hello");// 获得索引位置为5的元素的值String s = (String) Array.get(array, 5);System.out.println(s);}
B. 多维数组:
public static void main(String args[]) {int[] dims = new int[] { 5, 10, 15 };// 创建一个具有指定的组件类型和维度的新数组。Object array = Array.newInstance(Integer.TYPE, dims);// 取出三维数组的第3行,为一个数组Object arrayObj = Array.get(array, 3);Class<?> cls = arrayObj.getClass().getComponentType();System.out.println(cls);// 取出第3行的第5列,为一个数组arrayObj = Array.get(arrayObj, 5);// 访问第3行第5列的第10个元素,为其赋值37Array.setInt(arrayObj, 10, 37);// 动态数组和普通数组的转换:强行转换成对等的数组int arrayCast[][][] = (int[][][]) array;System.out.println(arrayCast[3][5][10]);}
JAVA 反射创建数组和操作数组的意义
数组是Java编程语言中的对象。与所有对象一样,它们都有类。如果您有一个数组,使用标准 getClass 方法,您可以获得该数组的类,就象任何其它对象一样。但是, 不通过现有的实例来获得类不同于其它类型的对象。即使您有一个数组类,您也不能直接对它进行太多的操作 -- 反射为标准类提供的构造函数接入不能用于数组,而且数组没有任何可接入的字段,只有基本的 java.lang.Object 方法定义用于数组对象。数组的特殊处理使用 java.lang.reflect.Array 类提供的静态方法的集合。该类中的方法使您能够创建新数组,获得数组对象的长度,读和写数组对象的索引值。
下面显示了一种重新调整现有数组大小的有效方法。它使用反射来创建相同类型的新数组,然后在返回新数组之前,在老数组中复制所有数据。
通过反射来扩展一个数组:
public Object growArray(Object array, int size) { Class type = array.getClass().getComponentType(); Object grown = Array.newInstance(type, size); System.arraycopy(array, 0, grown, 0,Math.min(Array.getLength(array), size)); return grown;}
- JAVA 反射创建数组和操作数组的意义
- JAVA 反射创建数组和操作数组的意义
- Java -- 利用反射 操作任意数组,包括对象数组 和 基本数据类型的数组
- java运用反射来创建并操作数组
- java数组,通过反射操作数组
- java反射应用--动态创建和访问数组
- 反射的使用---操作数组
- java数组的创建及常用操作
- 6.1MATLAB数组的创建和操作
- Java反射三 动态创建数组
- java中数组的反射
- java反射——操作数组
- 黑马程序员-java反射--数组的反射
- Java反射机制之数组的反射
- Java数组的创建和使用
- 数组指针的意义
- 数组名的意义
- Java 数组和List操作的错误
- 黑马程序员----基础学习第十四天
- 求一JAVA密码正则表达式,长度6位以上,需数字、字母和下划线组成
- Debian回收站无法删除解决
- 黑马程序员----基础学习第十五天
- 作为程序员,要取得非凡成就需要记住的15件事。
- JAVA 反射创建数组和操作数组的意义
- C++ MessageBox() 详解 (转载)
- Spring AppliactionContext功能介绍
- Worker线程使用消息循环
- MFC对话框静态文本颜色设置
- 黑马程序员----基础学习第十六天
- 鲜为人知的编程真相
- 关于MySQL的慢日志分析工具
- Static Member of Derived Class