一、Field
- Field 提供有关类或接口的单个字段的信息,以及对它的动态访问权限。
- 反射的字段可能是一个类(静态)字段或实例字段。
- Array 允许在执行 get 或 set 访问操作期间进行扩展转换,但如果将发生收缩转换,则抛出一个 IllegalArgumentException。
二、常用方法
public final class Field extends AccessibleObject implements Member { //没有构造方法 //返回指定对象上此 Field 表示的字段的值。如果该值是一个基本类型值,则自动将其包装在一个对象中 public Object get(Object obj) throws IllegalArgumentException, IllegalAccessException{} //获取一个静态或实例 boolean 字段的值 public boolean getBoolean(Object obj) throws IllegalArgumentException, IllegalAccessException{} public byte getByte(Object obj) throws IllegalArgumentException, IllegalAccessException{} public char getChar(Object obj) throws IllegalArgumentException, IllegalAccessException{} getShort getInt getLong getFloat getDouble //将指定对象变量上此 Field 对象表示的字段设置为指定的新值。 public void set(Object obj, Object value) throws IllegalArgumentException, IllegalAccessException{} public void setBoolean(Object obj, boolean z) throws IllegalArgumentException, IllegalAccessException{} setByte setChar setShort setInt setLong setFloat setDouble }
三、示例
package day23; import java.lang.reflect.*; public class ReflectDemo { public static void main(String[] args) { ReflectPoint rep = new ReflectPoint(3,5); Field fieldX = rep.getClass().getField("x"); System.out.println(fieldX);//public int day23.ReflectPoint.x System.out.println(fieldX.get(rep));//3 //Field fieldY = rep.getClass().getField("y"); 不能访问private Field fieldY = rep.getClass().getDeclaredField("y"); fieldY.setAccessible(true);//设置访问权限 System.out.println(fieldY.get(rep)); } } class ReflectPoint { public int x; private int y; public ReflectPoint(int x,int y) { this.x = x; this.y = y; } }
package day23; import java.lang.reflect.*; /** * 将任意一个对象中的所有String类型的成员变量所对应的字符串内容中的‘b’改成‘a’ */ public class ReflectDemo { public static void main(String[] args) throws Exception { ReflectPoint rep = new ReflectPoint(3,5); System.out.println(rep); changeStringValue(rep); System.out.println(rep); } private static void changeStringValue(Object obj) throws Exception { Field[] fields = obj.getClass().getFields(); for(Field field : fields) { //getType得到字段的类型 if(field.getType() == String.class) { String value = (String) field.get(obj); if(value.contains("b")) { value = value.replace("b","a"); field.set(obj, value); } } } } } class ReflectPoint { public int x; private int y; public String str1 = "abbcd"; public String str2 = "ball"; public String str3 = "ccccc"; public ReflectPoint(int x,int y) { this.x = x; this.y = y; } public String toString() { return str1+":"+str2+":"+str3; } }
相关推荐
在Java编程语言中,`java.lang.reflect`包是核心库的一部分,它提供了运行时访问类、接口、字段和方法的能力。这个包对于理解和操作对象的动态特性至关重要,尤其是在实现反射机制时。反射允许我们在程序运行期间...
Apache Commons Lang 是一个Java工具包,它提供了对Java核心库的补充,特别是在字符串处理、反射、日期和时间操作等方面。`commons-lang3-3.1.jar`是这个库的一个版本,其中包含了多个实用类和方法,有助于简化和...
1. 动态代理:使用`java.lang.reflect.Proxy`和`java.lang.reflect.InvocationHandler`可以创建动态代理对象,实现AOP(面向切面编程)。 2. 数据库操作框架:如MyBatis,通过反射动态生成SQL语句并执行。 3. XML...
3. **`java.lang.reflect.Field`**:表示类的成员变量。 4. **`java.lang.reflect.Method`**:表示类的方法。 5. **`java.lang.reflect.Modifier`**:提供对成员的修饰符的访问。 ##### 基本使用方法 1. **获取...
java.lang.reflect.Constructor; java.lang.reflect.Field; java.lang.reflect.Method; java.lang.reflect.Modifier;
Class 类代表了 Java 中的一个类,而 java.lang.reflect 包提供了许多反射类,例如 Constructor、Method、Field 等。 Constructor 类代表了某个类中的一个构造方法。例如,我们可以使用 Class.forName("java.lang....
其中最经常使用的是三个类:java.lang.reflect.Field类、java.lang.reflect.Method类和java.lang.reflect.Constructor类。 Java.lang.reflect.Field类提供了有关类或接口的单个域的信息。利用这个类,我们可以得到...
import java.lang.reflect.Field; import java.lang.reflect.Method; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFWorkbook; ...
import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; public class ReflectionTest { public static void main(String[] args) { Class c = null; try { ...
反射的核心类包括`java.lang.Class`、`java.lang.reflect.Field`、`java.lang.reflect.Method`和`java.lang.reflect.Constructor`。下面将详细阐述这些核心类以及反射的主要用法。 1. `java.lang.Class`:每个类在...
用以执行和JDK反射API中java.lang.Class,,java.lang.reflect.Method,, java.lang.reflect.Method .Field相同的操作。这些类可以使你在目标类被加载前,轻松的获得它的结构,函数,以及属性。此外,不仅仅是在功能...
在Java中,反射主要涉及到`java.lang.Class`、`java.lang.reflect.Method`、`java.lang.reflect.Field`和`java.lang.reflect.Constructor`等类。下面将详细介绍这些知识点。 1. **反射的概述** 反射机制使得Java...
6. 反射:`java.lang.reflect`包包含了反射相关的类,如`Class`、`Method`、`Field`。深入源码,我们可以掌握如何在运行时动态地访问和修改类的信息。 7. I/O操作:`java.io`和`java.nio`包提供了丰富的I/O操作接口...
反射机制的核心在于Java Reflection API,其中包括`java.lang.Class`,`java.lang.reflect.Method`,`java.lang.reflect.Field`和`java.lang.reflect.Constructor`等类。 首先,`java.lang.Class`是所有Java类的元...
Java反射机制主要依赖于`java.lang.reflect`包下的API,其中包括: - `java.lang.Class`:表示一个类的运行时信息。 - `java.lang.reflect.Method`:表示类的方法。 - `java.lang.reflect.Field`:表示类的字段。 -...
- `java.lang.reflect.Method`:表示类的方法,提供获取方法信息和调用方法的功能。 - `java.lang.reflect.Field`:表示类的成员变量,用于获取和设置字段值。 - `java.lang.reflect.Constructor`:表示类的构造函数...
这个接口被java.lang.Package、java.lang.Class实现,并间接地被Method类、Constructor类、java.lang.reflect的Field类实现。 6.Annotation中的方法参数可以通过Method类、Constructor类的getParameterAnnotations...
2. **Java.lang.reflect.AccessibleObject**: `Field`, `Method`, 和 `Constructor` 类的基类,提供了访问控制的机制,如设置访问权限以允许反射操作。 3. **Java.lang.reflect.Method**: 代表类的方法信息,包括...
3. 访问类的成员变量,包括私有变量,通过`Field.get()`和`Field.set()`。 4. 调用类的方法,包括私有方法,使用`Method.invoke()`。 5. 创建动态代理,通过`java.lang.reflect.Proxy`类,可以在运行时生成代理对象...