数组反射功能依赖类java.lang.reflect.Array
提供的功能:
1、动态获取数组某个位置的值。
2、动态生成数组对象(一维或者多维)。
3、动态设置数组某个位置的值。
例子:
package array;
import java.lang.reflect.Array;
import java.util.Arrays;
/**
* 测试Array 反射功能
* @author xinchun.wang
*
*/
public class ArrayReflect {
public static void main(String[] args) throws SecurityException, NoSuchMethodException {
int[] arr = new int[100];
for (int i = 0; i < arr.length; i++) {
arr[i] = i * i;
}
//使用Array反射获取数组的长度
int length = Array.getLength(arr);
System.out.println(length);
//使用Array反射获取数组的某个位置的值
Object Obj = Array.get(arr, 10);
System.out.println(Obj);
//使用Array反射设置某个位置的值
Array.set(arr, 20, new Integer(1));
System.out.println(Arrays.toString(arr));
//使用Array反射生成数组(一维数组)100 :数组的长度
B[] obj = (B[]) Array.newInstance(B.class, 100);
for (int i = 0; i < obj.length; i++) {
B h = obj[i];
System.out.println(h); // 都是null ,因为反射生成的都是引用
}
System.out.println(obj.length);
//使用反射生成多维数组 其中 1 维:有2个B[]数组,每个数组总有4个B元素
B[][] obj2 = (B[][]) Array.newInstance(B.class, 2,4);
System.out.println(Arrays.toString(obj2));
}
}
分享到:
相关推荐
在Java编程语言中,`java.lang.reflect`包是核心库的一部分,它提供了运行时访问类、接口、字段和方法的能力。这个包对于理解和操作对象的动态特性至关重要,尤其是在实现反射机制时。反射允许我们在程序运行期间...
6. **Array类**:`java.lang.reflect.Array`提供了动态创建数组以及访问数组元素的静态方法。例如: ```java Object array = Array.newInstance(type, length); Array.set(array, index, value); // 设置数组元素...
3. **反射操作**:`org.apache.commons.lang3.reflect`包提供了对Java反射机制的增强,如`MethodUtils`和`FieldUtils`,使得访问和操作类的成员更加简单。 4. **枚举处理**:`org.apache.commons.lang3.enums`支持...
- `java.lang.reflect.Array`: 封装数组信息的类。 #### 15.2 使用反射获取类信息 ##### 15.2.1 获取Class对象 要使用反射,首先需要获得`Class`对象。有几种常见的方式: 1. **通过对象的`getClass()`方法**: ...
5. `java.lang.reflect.Array`:处理数组的静态类。 **四、应用场景** 1. **插件化开发**:动态加载插件中的类和资源,无需提前知晓具体实现。 2. **序列化/反序列化**:如JSON库Gson、Jackson,通过反射将对象...
- `java.lang.reflect.Array#newInstance()`:创建数组实例。 - `java.lang.reflect.Constructor#newInstance()`:创建实例。 ##### 原型模式 原型模式使用一个现有的实例作为原型,通过复制该原型对象来创建新的...
在Java中,反射主要通过`java.lang.reflect`包中的几个核心类来实现: 1. `Class<T>`:表示运行时的Java应用程序中的类和接口。每个类在Java虚拟机中都有一个对应的`Class`对象。我们可以通过`Object`类的`getClass...
Java反射机制的核心类位于`java.lang.reflect`包中,主要包括以下几类: 1. **Class类**:表示一个类的信息,是反射机制的基础。 2. **Field类**:表示类的成员变量或属性。 3. **Method类**:表示类的方法。 4. **...
import java.lang.reflect.Array; import java.util.Arrays; import java.util.Scanner; public class Home { public static void main(String[] args) { System.out.println("请输入明文:"); Scanner input = ...
在Java中,反射主要通过`java.lang.Class`,`java.lang.reflect.Method`,`java.lang.reflect.Field`,以及`java.lang.reflect.Constructor`等类来实现。以下是一些关于Java反射的重要知识点: 1. **Class对象**:...
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....
import java.lang.reflect.Array; public class ArrayTest { public static void main(String[] args){ try{ //创建一个元素类型为String,长度为10的数组 Object arr=Array.newInstance(String.class,10)...
- `java.lang.reflect.Array`类提供了许多原生方法,如`newInstance`,用于增强对数组的操作。这表明Java对数组的支持是通过专用指令完成的,而不是通过标准的Java方法。 7. **多维数组的创建**: - 创建多维数组...
<%@ page import="java.lang.reflect.Array"%> <%@ page import="java.lang.Long"%> <%@ page import="java.util.HashMap"%> <jsp:useBean id="rd" class="songyc.ReadFile" scope="application"> ...
- ActionScript 的 `Array` 可以映射到 Java 的 `java.util.Collection` 或数组类型(`java.lang.reflect.Array`)。 - Java 中的集合和数组也能转换为 ActionScript 的 `Array`。 8. **Object** 和 `Map`: - ...
在Java中,我们可以使用java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口来创建动态代理。Proxy类用于生成代理对象,而InvocationHandler则处理方法调用。通过实现InvocationHandler,我们可以...
java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /* * JDK 动态代理 * */ public class dynamicProxyUsingJDK { public static void main(String[] args) ...
这一特性基于Java的`java.lang.reflect`包,提供了对类和对象深层次操作的能力,极大地扩展了Java的灵活性和可扩展性。 在Java中,反射主要涉及以下核心组件: 1. **Class对象**:每个类在内存中都有一个对应的...
Java的`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口用于实现这一机制。 在Java中,反射机制虽然提供了强大的功能,但也带来了一些潜在的问题,如性能损失、安全风险和代码可读性降低。...
在处理数组时,`java.lang.reflect.Array`类提供了一系列静态方法,用于创建、访问和操作数组。这使得我们可以在运行时动态地操作数组内容,如同直接访问数组一样。 Java 5引入了泛型,但因为类型擦除,运行时无法...