Field get() method in Java with examples

2025年5月2日 | 阅读 4 分钟

java.lang.reflect.Field 类有一个 get() 方法,用于检索字段对象的值。当字段是原始类型时,会自动为其值包装一个对象。如果字段是静态的,则 obj 参数将被忽略;它可以为 null。如果字段不是静态的,则 underlying field 是一个实例字段。如果提供的对象参数为 null,此方法将引发 IllegalArgumentException 和 NullPointerException。如果提供的对象不是声明底层字段的接口或类的实例,则上述规则仍然适用。如果字段隐藏在对象类型中,则使用前面的指南确定字段的值。

语法

参数:此方法只接受一个参数,即要从中提取字段值的 object

返回值:该方法返回 obj 对象中表示的字段的值;原始类型的值将被包装在一个适当的对象中返回。

Exception

该方法抛出以下异常

IllegalArgumentException- 如果提供的对象不是声明底层字段的类或接口的 (或其子类或实现者)的实例。

NullPointerException- 如果字段和提供的对象都是实例字段且为 null。

IllegalAccessException- 如果底层字段不可用,并且此 Field 对象正在实现 Java 语言中的访问控制。

ExceptionInInitializerError- 如果此方法尝试触发的初始化不成功。

示例 1

提供的 Java 代码在运行时访问 User 类的字段以说明反射。GetExample1 类使用 User.class.getFields()(它返回一个 Field 对象数组)来检索 User 类的所有公共字段。当 for 循环遍历所有字段时,会为每个字段调用 get() 方法,从 userObj 对象中检索值。然后打印每个字段的名称和值。User 类除了具有用于修改 Marksgained、Fees 和 Name 等静态值的 getter 和 setter 方法外,还拥有这些字段。在此,通过反射动态访问和显示字段值。

实施

文件名: GetExample1.java

输出

 
The Value of the Field Marksgained is given by 94.18
The Value of the Field Fees is given by 45000
The Value of the Field Name is given by Alan   

示例 2

该示例展示了如何使用 Java 反射从类中提取和发布静态字段数据。Fields 类包含几个静态 final 字段,包括 double、int、float 和 boolean。在主方法中,通过使用反射 API 来获取代表 Fields 类每个公共字段的 Field 对象数组。循环遍历每个字段,使用 get() 方法检索其值,并一起打印字段名称和值。尽管创建了 Fields 的实例(userObj),但由于字段是静态的,可以通过向 get() 提供 null 而无需实例来访问它们,因此不是必需的。

实施

文件名: GetExample2.java

输出

 
The value of the field doubleVal is 100000.123456
The value of the field intVal is 10000000
The value of the field floatVal is 1.0E7
The value of the field booleanVal is true