`

java.lang.reflect.Array的应用

阅读更多

java.lang.Array 类提供了动态创建和访问数组元素的各种静态方法。例程
ArrayTest 类的main()方法创建了一个长度为10 的字符串数组,接着把索引位置为5 的元素设为“hello”,然后再读取索引位置为5 的元素的值

一、作为一维数组示例代码:

这里第21行,也可以这样写:Array.setInt(array_2,10,37);

 

java 代码
  1. package com.test.reflect;   
  2.   
  3. import java.lang.reflect.Array;   
  4.   
  5. public class ArrayTest {   
  6.   
  7.     public static void main(String[] args) throws Exception {   
  8.            
  9.         Class clazz = Class.forName("java.lang.String");   
  10.            
  11.         //创建一个长度为10的字符串数组,在Java中数组也可以作为Object对象   
  12.         Object array = Array.newInstance(clazz, 10);   
  13.            
  14.         //把字符串数组对象的索引位置为5的元素设置为"hello"   
  15.         Array.set(array, 5"hello");   
  16.            
  17.         //获得字符串数组对象的索引位置为5的元素的值   
  18.         String str = (String)Array.get(array, 5);   
  19.         System.out.println(str);//hello   
  20.     }   
  21.   
  22. }   

 

二、作为多维数组对象示例代码

java 代码
  1. package com.test.reflect;   
  2.   
  3. import java.lang.reflect.Array;   
  4.   
  5. public class ArrayTest2 {   
  6.   
  7.     public static void main(String[] args) {   
  8.            
  9.         //dims的长度就表示了数组的维数,如这里的是三维   
  10.         int[] dims = new int[] {5,10,15};   
  11.         //array其实就是个三维数组对象了   
  12.         Object array = Array.newInstance(Integer.TYPE, dims);   
  13.            
  14.         //找到第一维下标为3的元素,此元素是个二维数组对象   
  15.         Object array_1 = Array.get(array, 3);   
  16.            
  17.         //找到第二维下标为5的元素,此元素是个一维数组对象   
  18.         Object array_2 = Array.get(array_1, 5);   
  19.            
  20.         //找到第三维下标为10的元素,此元素是个int类型的数据,并给这个数据赋值为37   
  21.         Array.set(array_2, 1037);   
  22.            
  23.         int[][][] value = (int[][][])array;   
  24.         System.out.println(value[3][5][10]);//37   
  25.            
  26.     }   
  27.   
  28. }   

 

上面的代码第21行也可以这样写:Array.setInt(array_2,10,37);

分享到:
评论
1 楼 hevowish 2010-05-11  
int[][][] value = (int[][][])array;  好像有点问题吧? 我试试了貌似有异常,你呢?

相关推荐

    Java.lang.reflect 包下常用的类及方法简介

    在Java编程语言中,`java.lang.reflect`包是核心库的一部分,它提供了运行时访问类、接口、字段和方法的能力。这个包对于理解和操作对象的动态特性至关重要,尤其是在实现反射机制时。反射允许我们在程序运行期间...

    java反射机制的应用

    5. `java.lang.reflect.Array`:处理数组的静态类。 **四、应用场景** 1. **插件化开发**:动态加载插件中的类和资源,无需提前知晓具体实现。 2. **序列化/反序列化**:如JSON库Gson、Jackson,通过反射将对象...

    JDK中的设计模式

    - `java.lang.reflect.Array#newInstance()`:创建数组实例。 - `java.lang.reflect.Constructor#newInstance()`:创建实例。 ##### 原型模式 原型模式使用一个现有的实例作为原型,通过复制该原型对象来创建新的...

    Java软件开发实战 Java基础与案例开发详解 15-1 反射 共13页.pdf

    - `java.lang.reflect.Array`: 封装数组信息的类。 #### 15.2 使用反射获取类信息 ##### 15.2.1 获取Class对象 要使用反射,首先需要获得`Class`对象。有几种常见的方式: 1. **通过对象的`getClass()`方法**: ...

    java反射........

    8. **数组操作**:反射还提供了对数组的操作,如`Array.newInstance()`创建数组,`Array.getLength()`获取数组长度,以及`Array.set()`和`Array.get()`来访问数组元素。 Java反射的使用广泛,但也有其潜在的风险。...

    4.反射-introdute.doc

    3. **Field类**:`java.lang.reflect.Field`表示类的成员变量,可以用来获取或设置类的字段值。例如: ```java Field field = classType.getDeclaredField("fieldName"); field.setAccessible(true); field.get...

    java 与 flex 数据转换

    - ActionScript 的 `Array` 可以映射到 Java 的 `java.util.Collection` 或数组类型(`java.lang.reflect.Array`)。 - Java 中的集合和数组也能转换为 ActionScript 的 `Array`。 8. **Object** 和 `Map`: - ...

    java反射实例

    在Java中,反射主要通过`java.lang.Class`,`java.lang.reflect.Method`,`java.lang.reflect.Field`,以及`java.lang.reflect.Constructor`等类来实现。以下是一些关于Java反射的重要知识点: 1. **Class对象**:...

    Java深度历险(七)——Java反射与动态代理.docx

    在处理数组时,`java.lang.reflect.Array`类提供了一系列静态方法,用于创建、访问和操作数组。这使得我们可以在运行时动态地操作数组内容,如同直接访问数组一样。 Java 5引入了泛型,但因为类型擦除,运行时无法...

    反射机制用Java描述下载资料

    import java.lang.reflect.Array; public class ArrayTest { public static void main(String[] args){ try{ //创建一个元素类型为String,长度为10的数组 Object arr=Array.newInstance(String.class,10)...

    Thinking.In.Java.3rd.Edition

    3. **集合框架**:书中详细探讨了Java集合框架,包括Array、ArrayList、LinkedList、Vector、Set、Map等各种容器类的使用,以及迭代器、泛型的应用,帮助读者掌握数据结构和算法在实际编程中的应用。 4. **接口与...

    common-lang3.jar

    3. **反射操作**:`org.apache.commons.lang3.reflect`包提供了对Java反射机制的增强,如`MethodUtils`和`FieldUtils`,使得访问和操作类的成员更加简单。 4. **枚举处理**:`org.apache.commons.lang3.enums`支持...

    java深度复制源代码

    import java.lang.reflect.Array; import java.lang.reflect.InvocationTargetException; import java.sql.Timestamp; import java.util.Collection; import java.util.Date; import java.util.Map; import java....

    java的反射机制

    Java反射机制的实现主要依赖于`java.lang.reflect`包中的几个核心类: - **Class类**:表示一个类,是反射机制的核心。通过Class类可以获取类的各种信息,如构造器、方法、字段等。 - **Field类**:表示类的成员...

    JAVA反射机制详解

    Java反射机制主要由`java.lang.reflect`包下的多个类共同实现,包括但不限于`Class`、`Field`、`Method`、`Constructor`和`Array`等。 #### 二、Java Reflection API简介 ##### 2.1 Class类 `Class`类是Java反射...

    JAVA-提高反射效率

    Java反射API主要由`java.lang.Class`、`java.lang.reflect.Method`、`java.lang.reflect.Field`等类组成。通过这些类,我们可以获取类的信息,实例化对象,以及动态调用方法和访问字段。 1. **缓存Class对象**:...

Global site tag (gtag.js) - Google Analytics