8.23Java反射访问成员变量
2021/8/23 20:05:54
本文主要是介绍8.23Java反射访问成员变量,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
8.23Java反射访问成员变量
访问成员变量的方法
-
getFields()
-
getField(String name)
-
getDeclaredFields()
-
getDeclaredField(String name)
会返回一个Field对象,代表一个成员变量
object.getDeciaredField("price");
Filed
类常用的方法
方法名称 | 说明 |
---|---|
getName() | 获得该成员变量的名称 |
getType() | 获取表示该成员变量的 Class 对象 |
get(Object obj) | 获得指定对象 obj 中成员变量的值,返回值为 Object 类型 |
set(Object obj, Object value) | 将指定对象 obj 中成员变量的值设置为 value |
getlnt(0bject obj) | 获得指定对象 obj 中成员类型为 int 的成员变量的值 |
setlnt(0bject obj, int i) | 将指定对象 obj 中成员变量的值设置为 i |
setFloat(Object obj, float f) | 将指定对象 obj 中成员变量的值设置为 f |
getBoolean(Object obj) | 获得指定对象 obj 中成员类型为 boolean 的成员变量的值 |
setBoolean(Object obj, boolean b) | 将指定对象 obj 中成员变量的值设置为 b |
getFloat(Object obj) | 获得指定对象 obj 中成员类型为 float 的成员变量的值 |
setAccessible(boolean flag) | 此方法可以设置是否忽略权限直接访问 private 等私有权限的成员变量 |
getModifiers() | 获得可以解析出该方法所采用修饰符的整数 |
示例:
package PracticeReview.Reflect; /** * 反射训练类,用于练习 * @since JDK 1.8 * @date 2021/08/23 * @author Lucifer */ public class ReflectPracticeDemoNo3 { String name; public int id; private float price; protected boolean isLoan; }
访问成员变量测试类:
package PracticeReview.Reflect; import java.lang.reflect.Field; public class ReflectTestNo3 { public static void main(String[] args) { ReflectPracticeDemoNo3 reflectPracticeDemoNo3 = new ReflectPracticeDemoNo3(); //获取动态类 Class class1 = reflectPracticeDemoNo3.getClass(); // 获取ReflectPracticeDemoNo3类的所有成员 Field[] declaredFields = class1.getDeclaredFields(); // 遍历所有的成员 for(int i = 0;i < declaredFields.length;i++) { // 获取类中的成员变量 Field field = declaredFields[i]; System.out.println("成员名称为:" + field.getName()); Class fieldType = field.getType(); System.out.println("成员类型为:" + fieldType); boolean isTurn = true; while (isTurn) { try { // 如果该成员变量的访问权限为private,则抛出异常 isTurn = false; System.out.println("修改前成员的值为:" + field.get(reflectPracticeDemoNo3)); // 判断成员类型是否为int if (fieldType.equals(int.class)) { System.out.println("利用setInt()方法修改成员的值"); field.setInt(reflectPracticeDemoNo3, 100); } else if (fieldType.equals(float.class)) { // 判断成员变量类型是否为float System.out.println("利用setFloat()方法修改成员的值"); field.setFloat(reflectPracticeDemoNo3, 29.815f); } else if (fieldType.equals(boolean.class)) { // 判断成员变量是否为boolean System.out.println("利用setBoolean()方法修改成员的值"); field.setBoolean(reflectPracticeDemoNo3, true); } else { System.out.println("利用set()方法修改成员的值"); field.set(reflectPracticeDemoNo3, "Java编程"); } System.out.println("修改后成员的值为:" + field.get(reflectPracticeDemoNo3)); } catch (Exception e) { System.out.println("在设置成员变量值时抛出异常,下面执行setAccessible()方法"); field.setAccessible(true); isTurn = true; } } } } }
这篇关于8.23Java反射访问成员变量的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-28MQ底层原理资料详解:新手入门教程
- 2024-11-28MQ项目开发资料详解:新手入门教程
- 2024-11-28MQ项目开发资料详解:入门与初级用户指南
- 2024-11-28MQ消息队列资料入门教程
- 2024-11-28MQ消息队列资料:新手入门详解
- 2024-11-28MQ消息中间件资料详解与应用教程
- 2024-11-28MQ消息中间件资料入门教程
- 2024-11-28MQ源码资料详解与入门教程
- 2024-11-28MQ源码资料入门教程
- 2024-11-28RocketMQ底层原理资料详解