温馨提示×

温馨提示×

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

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

如何获取Java Field

发布时间:2026-07-26 13:04:58 来源:亿速云 阅读:92 作者:小樊 栏目:编程语言

在 Java 中,**获取 Field(字段)通常是通过反射(Reflection)**来实现的。下面从常见用法到注意事项给你一个完整说明。


一、获取 Field 的常见方式

1️⃣ 获取所有字段

获取当前类声明的字段(不包含父类)

Class<?> clazz = MyClass.class;
Field[] fields = clazz.getDeclaredFields();

获取所有 public 字段(包括父类)

Field[] fields = clazz.getFields();

2️⃣ 获取指定字段

获取当前类中声明的字段(推荐)

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

获取 public 字段(包括父类)

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

⚠️ 如果字段不存在,会抛:

NoSuchFieldException

二、访问字段的值

1️⃣ 设置可访问(非常重要)

如果是 private / protected,必须先设置:

field.setAccessible(true);

否则会抛:

IllegalAccessException

2️⃣ 读取字段值

Object value = field.get(obj);

示例:

MyClass obj = new MyClass();
Field field = obj.getClass().getDeclaredField("name");
field.setAccessible(true);

String name = (String) field.get(obj);

3️⃣ 修改字段值

field.set(obj, newValue);

示例:

field.set(obj, "newName");

三、获取字段类型、修饰符等信息

Class<?> type = field.getType();        // 字段类型
int modifiers = field.getModifiers();   // 修饰符

判断修饰符:

Modifier.isPrivate(modifiers);
Modifier.isStatic(modifiers);
Modifier.isFinal(modifiers);

四、静态字段的访问

Field field = MyClass.class.getDeclaredField("STATIC_FIELD");
field.setAccessible(true);

Object value = field.get(null);   // 静态字段,传 null

五、常见示例(完整)

class Person {
    private String name;
    public int age;
}

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

        Field nameField = p.getClass().getDeclaredField("name");
        nameField.setAccessible(true);
        nameField.set(p, "Tom");

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

六、注意事项(非常重要)

性能问题
反射比直接访问慢,避免在高频场景使用。

安全问题
setAccessible(true) 会绕过访问控制。

Java 9+ 模块系统
如果字段在模块中未开放,可能抛:

InaccessibleObjectException

final 字段
修改 final 字段在多数情况下不推荐,可能导致未定义行为。


七、什么时候用 Field 反射?

✅ 通用工具(ORM、序列化、JSON 转换)
✅ 框架开发
✅ 动态配置
❌ 普通业务代码(不推荐)


如果你有具体场景(比如 Spring、Jackson、MyBatis、注解处理),我可以给你更针对性的示例。

向AI问一下细节

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

AI