java反射机制--Field类

Field类

1、如何访问Class实例的字段信息?

Created with Raphaël 2.2.0 获取class对应的Class的实例对象 获取Field的实例对象

获取Field方法总结

  1. getField(String 字段名):获取类及其父类指定public字段
  2. getFields():获取类及其父类中全部的public字段数组
  3. getDeclaredField(String 字段名):获取获取类中指定字段
  4. getDeclaredFields():获取类中全部的字段数组

注意事项

如果想要获取父类的所有成员变量(主要是为了拿到私有成员变量,只想获取公有成员变量可以直接使用getField()),可以通过getSuperclass()取得当前类的父类的class对象再调用getDeclaredField()方法。

2、如何获取字段信息?

※ Field结构示意图

在这里插入图片描述

1)通常使用原则

  1. 通过Class实例,调用getDeclaredFields()获取class字段信息,类型为Field[]
  2. 遍历属性字段数组,调用getName(String param)获取class的字段名称,调用get(class c)方法获取class属性值

2)获取字段信息的方法总结

  1. getName():返回字段名称
  2. getType()::返回字段类型,也是一个Class实例
  3. getModifiers():返回字段的修饰符,它是一个int,不同的bit表示不同的含义,private2public1

※ 注意事项

使用Field一般只能用来获取public修饰的字段信息,如果要获取private修饰的字段需要加上field.setAccessible(true);这样的语句,表示不管是不是public修饰的字段,都一律允许访问。

3、总结

1、四种获取Field的方法
2、三个获取Field内容的方法
3、要获取private修饰字段要手动提前设置访问权限
4、反射是非常规方式,会破坏封装机制,有时候为了保证JVM核心的安全性,会出现禁止手动设置访问权限的问题

猜你喜欢

转载自blog.csdn.net/weixin_38708854/article/details/106135832