Java getField()方法详解
在 Java 反射中,使用 Class
类的 getField(String name)
方法,可以获取一个指定名称的公共字段。该方法返回一个 Field
类型的对象,代表该字段。
方法签名
public Field getField(String name) throws NoSuchFieldException, SecurityException
参数说明
name
:要获取的字段名称。
异常说明
该方法会抛出两种异常:
NoSuchFieldException
:如果该字段不存在,则抛出此异常。SecurityException
:如果当前操作被安全管理器拒绝,则抛出此异常。
示例一
下面的示例代码演示了如何使用 getField()
方法,获取指定名称的公共字段。
import java.lang.reflect.*;
public class FieldDemo {
public static void main(String[] args) {
try {
// 获取 String 类的 length 字段
Field field = String.class.getField("length");
// 输出字段信息
System.out.println("Field Name: " + field.getName());
System.out.println("Field Type: " + field.getType());
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出结果:
Field Name: length
Field Type: int
在上面的代码中,我们使用 getField()
方法获取 String
类的 length
字段,并输出了该字段的名称和类型。
示例二
下面的示例代码演示了如果获取指定类的私有字段。
import java.lang.reflect.*;
public class FieldDemo {
public static void main(String[] args) {
try {
// 获取 Student 类的 score 私有字段
Field field = Student.class.getDeclaredField("score");
// 设置可访问性
field.setAccessible(true);
// 获取 Student 实例
Student stu = new Student("Tom", 18, 99);
// 获取私有字段的值
int score = (int)field.get(stu);
// 输出结果
System.out.println("Student's score: " + score);
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Student {
private String name;
private int age;
private int score;
public Student(String name, int age, int score) {
this.name = name;
this.age = age;
this.score = score;
}
}
输出结果:
Student's score: 99
在上面的代码中,我们通过 getDeclaredField()
方法获取了 Student
类的 score
字段,然后设置可访问性,接着获取了 Student
实例并获取了私有字段的值,最后输出了结果。
注意:若要获取私有字段,需要先调用 setAccessible(true)
方法,否则会抛出 IllegalAccessException
异常。