反射学习4-通过反射机制动态创建和访问数组

一、前言

java.lang.reflect.Array类提供了动态创建和访问数组元素的各种静态方法。

static Object
  
newInstance(Class<?> componentType,
int... dimensions)
创建一个具有指定的组件类型和维度的新数组。componentType:组件类型,Java中将数组的数组也就是二维数组当做一个组件。

static Object
get(Object array, int index)
返回指定数组对象中索引组件的值。

static void
set(Object array, int index, Object value)
将指定数组对象中索引组件的值设置为指定的新值。

二、以下是几个Array的实例

调用Array的newInstance()方法创建数组:

一维数组:

Class classType = Class.forName("java.lang.String");
Object array = Array.newInstance(classType, 10);

多维数组:

Class classType = Class.forName("java.lang.String");
int[] dimension = new int[]{10,10,10};
Object array2_3d = Array.newInstance(classType, dimension);

调用Array的get()方法获取数组的值:

一维数组:

System.out.println((String)Array.get(array, 1));

多维数组:

Class classType = Class.forName("java.lang.String");
int[] dimension = new int[]{10,10,10};
Object array2_3d = Array.newInstance(classType, dimension);
//获取三维数组的第一个数组组件array2Obj,是一个二维数组
Object array2Obj_2d = Array.get(array2, 1);
//获取array2Obj_2的第二个数组组件,是一个一维数组
Object array2Obj_1d = Array.get(array2Obj_2d, 2);

调用Array的set()方法设置数组的值:

一维数组:

Array.set(array, 1, "arthinking");

多维数组:

Array.set(array2Obj_1d, 3, "arthinking");

完整代码如下
一维数组,创建一个一维数组并设置第一个元素的值:

Class classType = Class.forName("java.lang.String");
Object array = Array.newInstance(classType, 10);
Array.set(array, 1, "arthinking");
System.out.println((String)Array.get(array, 1));

多维数组,创建一个三维数组并设置元素array[1][2][3]的值:

Class classType = Class.forName("java.lang.String");
int[] dimension = new int[]{10,10,10};
Object array2_3d = Array.newInstance(classType, dimension);
//获取三维数组的第一个数组组件array2Obj,是一个二维数组
Object array2Obj_2d = Array.get(array2_3d, 1);
//获取array2Obj_2的第二个数组组件,是一个一维数组
Object array2Obj_1d = Array.get(array2Obj_2d, 2);
//设置array2Obj_1的第三个元素的值
Array.set(array2Obj_1d, 3, "arthinking");
//从三维数组array2中获取刚才设置的值
System.out.println(((String[][][])array2_3d)[1][2][3]);

//获取array2Obj_2d的组件类型
Class<?> classType2 =
array2Obj_2d.getClass().getComponentType();

时间: 2024-12-28 02:14:22

反射学习4-通过反射机制动态创建和访问数组的相关文章

C语言 动态创建二维数组

/*C语言 如何动态创建二维数组 转化为一维数组申请数组,创建和释放都比较简单 */ #include <stdlib.h> #include <stdio.h> #include <malloc.h> #define RANK 10 #define COLUMN 7 int main() { int i,j; int (*p)[COLUMN]; //动态生成二维数组,指定列数为COLUMN,如果想改,自己该里面 //的参数,如果想定义n行2列就为: p=(int (*

动态创建二维数组

vector创建二维数组 初始化二维数组 vector<vector <int> > ivec(n ,vector<int>(m)); //n*m的二维vector vector<vector <int> > ivec(n , vector<int>(m, 0)); //n*m的二维vector,所有元素为0 动态创建m*n的二维 方法一: vector<vector <int> > ivec; ivec.re

动态创建并访问网页元素

最近在做OCX控件,但这个控件并不是一打开网页就需要初始化的,而是根据需要动态创建:在控件初始化的时候需要在控件内部获取其在网页中的DOM对象:并且创建之后需要立刻调用控件的方法. 最开始的方法如下: 1 var ctrl = document.createElement('object'); 2 ctrl.classid = 'CLSID:DCC16727-7A51-47B4-B38E-B020EAAF0584'; 3 document.body.appendChild(ctrl); 这个方法

【C语言】动态创建二维数组

//动态创建二维数组 #include <stdio.h> #include <stdlib.h> #include <malloc.h> int main() { int i,j; int n,m; //以n行5列为例 int (*p)[5]; printf("请输入行数:"); scanf("%d",&n); p=(int(*)[5])malloc(5*n*sizeof(int)); for(i=0;i<n;i+

c++ 动态创建二维数组

为了做一个东西需要用到动态创建二维数组,特此记录. #include <iostream> #include "time.h" using namespace std; int main() { srand((unsigned)time(NULL)); int x_num; int y_num; cout<<"please input x_num:"; cin>>x_num; cout<<"please in

&lt;细节&gt;动态创建二维数组

今天在做一个关于数组相似度的题目,需要动态创建二维数组,刚开始想用常规的int a[ ][ ]建立,但很快就发现行不通,这种常规数组必须在编译前指定数组的维数,而这个题目在的维数必须在运行中计算得出,于是想到采用new来建立动态二维数组,这个方法行得通,但是很麻烦,也不太利于理解,后面决定采用vector< vector< int > >方法来创建,简单了不少,下面对两种方法都进行一下总结. 1.使用vector创建二维数组 #include <iostream> #i

反射学习2-通过反射机制动态获取属性的值模拟Struts的自动赋值

一.准备知识:   Java反射机制   处理事务的JavaBean   String的操作常用方法 二.模拟步骤   这里我们通过反射机制动态获取属性的值模拟Struts中的自动赋值. 1.首先创建一个简单的User类包含两个属性username和userid以及getter.setter方法: class User {     public User(){} private String username; private String userid; public String getUs

【Java 反射学习】Java 反射基础

知识点 类是用来描述对象的,而反射就可以理解为是用来描述类的. 类中的属性包括: Class 类本身 Package 类所在的包 Field 类中的属性 Method 类中的方法 Constructor 类中的构造方法 Annotation 类中的注解 如何获取Class 1.Class的静态方法,forName("全类名") 2.类.class关键字 3.对象引用.getClass()方法 Object中的方法 Class中的常用方法 /* 0--默认不写 1--public 2--

《DOM Scripting》学习笔记-——第七章 动态创建html内容

本章内容: 1.动态创建html内容的"老"技巧:document.write()和innerHTML属性 2.DOM方法:createElement(),creatTextNode(),appendChild(),insertBefore(). 一.document.write() 语法:document.write(" ") document.write(变量) 缺点:违背了"分离js"原则.即使把document.write语句挪到外部函数