Java 中变量怎么通过反射机制动态获取属性名和属性值

秋瑶姑娘_6378

秋瑶姑娘_6378

2026-07-23

534人浏览

原创

java反射获取对象属性名和值需用getdeclaredfields()获取所有声明字段,设setaccessible(true)绕过private限制,过滤synthetic和static字段后,通过field.getname()和field.get(obj)提取键值对。

java 中变量怎么通过反射机制动态获取属性名和属性值

Java 中通过反射机制动态获取对象的属性名和属性值,核心是利用 Class 对象获取其声明的字段(Field),再通过设置访问权限(绕过 private 限制)读取对应值。

获取所有声明的字段(含 private)

使用 getDeclaredFields() 可以拿到当前类中定义的所有字段(不包括继承的),无论访问修饰符如何。注意它不会自动获取父类字段,如需全部字段需递归向上遍历父类。

  • 调用 clazz.getDeclaredFields() 返回 Field[]
  • 对每个 Field 调用 setAccessible(true) 才能读取 private 字段值
  • 避免在循环中重复调用 setAccessible(true),可统一处理

获取字段名和当前对象的值

字段名通过 field.getName() 直接获得;字段值则需用 field.get(obj),其中 obj 是目标实例。该方法返回 Object 类型,原始类型会自动装箱(如 int → Integer)。

Java Maven Code Review
Java Maven Code Review

审查Java Maven项目(ZIP压缩包或GitLab仓库URL),检查代码规范、命名、模块边界、可维护性问题以及重复代码。

下载
  • 若字段为 static,field.get(null) 即可获取静态值
  • 若字段类型是基本类型且值为 null(如未初始化的 int 字段),实际会返回默认值(0、false 等),不是 null
  • 若字段值为 null(引用类型),field.get(obj) 返回 null,需判空避免 NPE

跳过 synthetic 字段和静态字段(按需过滤)

编译器自动生成的字段(如枚举的 $VALUES、内部类的 this$0)带有 isSynthetic() 标记;静态字段可通过 Modifier.isStatic(field.getModifiers()) 判断。实际业务中常需排除这两类。

  • 用 field.isSynthetic() 过滤掉编译器生成字段
  • 用 Modifier.isStatic(field.getModifiers()) 排除 static 字段
  • 也可结合 field.getType().isPrimitive() 或 field.getType() == String.class 做类型筛选

完整示例代码片段

以下是一个安全读取非静态、非 synthetic 字段名与值的典型写法:

public static Map<string object> getFields(Object obj) {
    Map<string object> map = new LinkedHashMap();
    Class> clazz = obj.getClass();
    Field[] fields = clazz.getDeclaredFields();
    for (Field field : fields) {
        if (field.isSynthetic() || Modifier.isStatic(field.getModifiers())) continue;
        field.setAccessible(true);
        try {
            map.put(field.getName(), field.get(obj));
        } catch (IllegalAccessException e) {
            // 忽略无法访问的字段,或记录日志
        }
    }
    return map;
}
</string></string>

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

9657

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

6802

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

6032

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1044

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

868

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1276

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2529

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

19871

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1135

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习