反射
通过Java的反射机制,可以在程序中访问已经装载到JVM中的Java对象的描述,实现访问,检测和修改描述Java对象本身信息的功能。通过反射可以访问构造方法,成员变量,和成员方法。
访问构造方法:Java反射——访问构造方法
访问成员方法:Java反射——访问成员方法
访问成员变量
利用Field对象可以操作相应的成员变量。

Field类的常用方法:
| 方法 | 说明 |
|---|---|
| getName() | 获取成员变量的名称 |
| getType() | 获得表示该成员变量类型的class对象 |
| get(Object obj) | 获得指定对象obj中成员变量的值,返回值为Object型 |
| set(Object obj, Object value) | 将指定对象obj中成员变量的值设为value |
| getInt(Object obj) | 获得指定对象obj中类型为int的成员变量的值 |
| setInt(Object obj, int i) | 将指定对象obj中类型为int的成员变量的值设置为i |
| getFloat((Object obj)) | 获得指定对象obj中类型为float的成员变量的值 |
| setFloat(Object obj, float f) | 将指定对象obj中类型为float的成员变量的值设置为f |
| getBoolean(Object obj) | 获得指定对象obj中类型为Boolean的成员变量的值 |
| setBoolean(Object obj, boolean z) | 将指定对象obj中类型为Boolean的成员变量的值设置为z |
| setAccessible(boolean flag) | 此方法可以设置是否忽略权限限制直接访问private等私有权限的成员变量 |
| getModifiers() | 获得可以解析出该成员变量所采用修饰符的整数 |
getModifiers()方法的返回值是所表示的修饰符信息,在该类中提供了一系列用来解析的静态方法,既可以查看是否被指定的修饰符修饰,还可以以字符串的形式获得所有修饰符。
Modifier类中的常用解析方法:
| 静态方法 | 说明 |
|---|---|
| isPublic(int mod) | 查看是否被public修饰符修饰,如果是返回true,反之返回false |
| isProtected(int mod) | 查看是否被protected修饰符修饰,如果是返回true,反之返回false |
| isPrivate(int mod) | 查看是否被private修饰符修饰,如果是返回true,反之返回false |
| isStatic(int mod) | 查看是否被static修饰符修饰,如果是返回true,反之返回false |
| isFinal(int mod) | 查看是否被Final修饰符修饰,如果是返回true,反之返回false |
| toString(int mod) | 以字符串形式返回所有修饰符 |
获取和修改成员变量的值:

首先创建一个Study类,在该类中声明三个不同类型,不同修饰符的成员变量,并赋值。
public class Study {
public int id = 1;
public String name = "反射";
private double price = 3.1315;
}
然后在另一个类Study2中反射这三个变量。
public class Study2 {
public static void main(String[] args) {
try {
Class c = Class.forName("study.czm.Study");// 创建class对象
Field fi[] = c.getDeclaredFields();// 获取所有成员变量
for (Field f : fi) {
System.out.print(Modifier.toString(f.getModifiers()) + " ");// 获取成员变量修饰符
System.out.print(f.getType
Java反射:深入访问成员变量

本文探讨了Java反射机制中如何访问成员变量。通过Field对象,可以操作类的成员变量,包括获取和修改其值。文章详细介绍了Field类的关键方法,如getModifiers(),并展示了如何处理不同类型的成员变量,包括私有(private)变量的访问。通过实例代码展示了反射在实际应用中的过程。
最低0.47元/天 解锁文章
227

被折叠的 条评论
为什么被折叠?



