温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java Field字段怎么反射

发布时间:2026-09-16 06:42:05 来源:亿速云 阅读:95 作者:小樊 栏目:编程语言

在 Java 中,可以通过 反射(Reflection) 来操作类的 Field(字段),包括获取字段、访问值、修改值,甚至操作 private 字段。

下面按常见用法给你一个完整说明和示例。


一、获取 Field 的方式

假设有如下类:

public class User {
    public String name;
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

1. 获取所有字段

Class<?> clazz = User.class;

Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
    System.out.println(field.getName());
}

2. 获取指定字段

// 只能获取 public 字段
Field nameField = clazz.getField("name");

// 可获取任意访问权限字段
Field ageField = clazz.getDeclaredField("age");

二、读取字段值(get)

User user = new User("Tom", 18);

// public 字段
Field nameField = User.class.getField("name");
String name = (String) nameField.get(user);
System.out.println(name);

// private 字段
Field ageField = User.class.getDeclaredField("age");
ageField.setAccessible(true); // 解除私有限制
int age = (int) ageField.get(user);
System.out.println(age);

三、修改字段值(set)

User user = new User("Tom", 18);

Field nameField = User.class.getField("name");
nameField.set(user, "Jerry");

Field ageField = User.class.getDeclaredField("age");
ageField.setAccessible(true);
ageField.set(user, 20);

System.out.println(user.name); // Jerry

四、操作 static 字段

public class Config {
    public static String VERSION = "1.0";
}
Field field = Config.class.getField("VERSION");
String value = (String) field.get(null); // 静态字段传 null
field.set(null, "2.0");

五、获取字段类型 & 注解

Field field = User.class.getDeclaredField("age");

Class<?> type = field.getType();
System.out.println(type); // int

if (field.isAnnotationPresent(Deprecated.class)) {
    // 有注解
}

六、常见注意点(很重要)

1. private 字段必须设置

field.setAccessible(true);

否则会抛:

IllegalAccessException

2. 性能问题

反射比直接调用慢,避免在高频代码中大量使用。

3. 模块限制(JDK 9+)

如果字段在模块中且未开放:

InaccessibleObjectException

七、总结常用 API

方法 说明
getField(name) 获取 public 字段
getDeclaredField(name) 获取任意字段
setAccessible(true) 突破访问限制
get(obj) 获取值
set(obj, value) 设值
getType() 字段类型

如果你有 具体场景(比如:Spring、JSON、ORM、动态赋值、工具类),我可以给你更针对性的示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手