温馨提示×

温馨提示×

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

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

怎么反射java Field字段

发布时间:2026-10-27 13:00:52 来源:亿速云 阅读:92 作者:小樊 栏目:编程语言

在 Java 中,反射(Reflection)获取和操作 Field(字段) 通常按下面几个步骤进行:


一、获取 Class 对象

先拿到类的 Class 对象,常见三种方式:

Class<?> clazz = User.class;
// 或
Class<?> clazz = Class.forName("com.example.User");
// 或
Class<?> clazz = user.getClass();

二、获取 Field 字段

1️⃣ 获取指定字段(包括私有)

Field field = clazz.getDeclaredField("name");

2️⃣ 获取所有字段

Field[] fields = clazz.getDeclaredFields(); // 自身定义的字段
Field[] fields2 = clazz.getFields();        // 只包含 public 字段

三、设置可访问(针对 private 字段)

反射访问私有字段必须设置:

field.setAccessible(true);

四、读取字段值

Object value = field.get(obj);

示例:

User user = new User();
user.setName("Tom");

Field field = User.class.getDeclaredField("name");
field.setAccessible(true);

String name = (String) field.get(user);
System.out.println(name);

五、修改字段值

field.set(obj, value);

示例:

field.set(user, "Jerry");

六、获取字段信息

field.getName();         // 字段名
field.getType();         // 字段类型
field.getModifiers();    // 修饰符

七、完整示例

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

    // getter / setter 省略
}

public class Test {
    public static void main(String[] args) throws Exception {
        User user = new User();

        Field nameField = User.class.getDeclaredField("name");
        nameField.setAccessible(true);
        nameField.set(user, "Tom");

        System.out.println(nameField.get(user));
    }
}

八、常见注意点

✅ 反射会破坏封装
✅ 性能较低,不宜高频调用
✅ 模块系统(Java 9+)可能限制反射
✅ 静态字段用 field.get(null)


如果你有具体场景(如 Spring、序列化、拷贝对象、泛型字段),我可以直接给你对应示例。

向AI问一下细节

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

AI
助
手