473. Java 反射 - 获取字段修饰符 文章目录473. Java 反射 - 获取字段修饰符1. 使用 getModifiers() 获取修饰符示例代码输出结果2. 使用 accessFlags()Java 20 推荐方式示例代码输出结果3. getModifiers() vs accessFlags() 对比4. 总结473. Java 反射 - 获取字段修饰符字段Field的修饰符和类的修饰符获取方式是类似的。我们既可以用传统的getModifiers()Modifier工具类也可以用accessFlags()Java 20 引入的 API来获取更直观的结果。1. 使用getModifiers()获取修饰符示例代码importjava.lang.reflect.*;classUser{privateStringname;}publicclassFieldModifierDemo{publicstaticvoidmain(String[]args)throwsException{Class?userClassUser.class;FieldnameFielduserClass.getDeclaredField(name);intmodifiersnameField.getModifiers();System.out.println(isStatic: Modifier.isStatic(modifiers));System.out.println(isPublic: Modifier.isPublic(modifiers));System.out.println(isPrivate: Modifier.isPrivate(modifiers));System.out.println(isFinal: Modifier.isFinal(modifiers));}}输出结果isStatic:falseisPublic:falseisPrivate:trueisFinal:false✅说明字段name是private所以只有isPrivate返回true。没有static、final、public修饰符。2. 使用accessFlags()Java 20 推荐方式Java 20 引入了Field.accessFlags()方法它返回一个SetAccessFlag比int掩码更直观。示例代码importjava.lang.reflect.*;classUser{privateStringname;}publicclassAccessFlagDemo{publicstaticvoidmain(String[]args)throwsException{Class?userClassUser.class;FieldnameFielduserClass.getDeclaredField(name);varflagsnameField.accessFlags();System.out.println(Flags flags);}}输出结果Flags[PRIVATE]✅说明输出直接显示[PRIVATE]无需手动解码。与类的accessFlags()类似字段也能通过这种方式读取修饰符。3.getModifiers()vsaccessFlags()对比方法返回类型可读性支持版本getModifiers()int位掩码需要Modifier.isXXX()解码JDK 1.1 起accessFlags()SetAccessFlag直观可读性更强JDK 20 起注意Modifier与AccessFlag并不是一一对应的。比如SUPER这种 flag 在Modifier中并没有对应。因此在现代 Java 中推荐使用accessFlags()。4. 总结老办法getModifiers()返回int→ 用Modifier解码。新办法推荐accessFlags()返回SetAccessFlag更直观易用。字段修饰符可以帮助框架或工具判断字段是否可访问 (public/private)是否属于类 (static)是否常量 (final)是否可被序列化/反射操作