温馨提示×

温馨提示×

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

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

Java Field如何访问

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

在 Java 中,Field(字段) 的访问方式取决于你是直接访问还是通过反射访问。下面分情况说明,并给出示例。


一、直接访问 Field(最常见)

1️⃣ 访问规则

修饰符 类内 同包 子类 任意
public
protected
默认(无修饰符)
private

2️⃣ 示例

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

    public void show() {
        System.out.println(name); // 类内直接访问
    }
}
Person p = new Person();
p.name = "Tom";          // public 字段
// p.age = 10;           // ❌ private 不能直接访问

二、通过 getter / setter 访问(推荐)

最佳实践:字段一般设为 private,通过方法访问。

public class Person {
    private int age;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
Person p = new Person();
p.setAge(18);
System.out.println(p.getAge());

三、使用反射访问 Field(重点)

1️⃣ 获取 Field 的方式

Class<?> clazz = Person.class;
Field field = clazz.getDeclaredField("age");
方法 说明
getField(name) 只能获取 public 字段
getDeclaredField(name) 可获取任意字段(包括 private)

2️⃣ 访问 private Field

Person p = new Person();

Field field = Person.class.getDeclaredField("age");
field.setAccessible(true);   // 解除私有限制

field.set(p, 20);
int age = (int) field.get(p);

System.out.println(age);

关键点

  • setAccessible(true) 是访问 private 字段的必须步骤
  • 反射会破坏封装性,慎用

四、静态 Field 的访问

public class Constants {
    public static int MAX = 100;
}
int max = Constants.MAX;

// 反射方式
Field f = Constants.class.getField("MAX");
int value = (int) f.get(null); // 静态字段,obj 传 null

五、常见错误

❌ 访问 private 字段未 setAccessible
❌ 类型转换错误
❌ 字段名拼写错误
❌ 在非法访问权限下直接访问


六、总结

普通访问:直接访问或 getter/setter
反射访问getDeclaredField + setAccessible
静态字段get(null)

如果你有具体场景(如 Spring、注解、序列化、动态代理),可以告诉我,我可以结合场景详细讲。

向AI问一下细节

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

AI