Field类
1、如何访问Class实例的字段信息?
获取Field方法总结
getField(String 字段名)
:获取类及其父类中指定
的public
字段getFields()
:获取类及其父类中全部的public
字段数组
getDeclaredField(String 字段名)
:获取获取类中指定
字段getDeclaredFields()
:获取类中全部的字段数组
注意事项
如果想要获取父类
的所有成员变量(主要是为了拿到私有成员变量
,只想获取公有成员变量可以直接使用getField()
),可以通过getSuperclass()
取得当前类的父类的class
对象再调用getDeclaredField()
方法。
2、如何获取字段信息?
※ Field结构示意图
1)通常使用原则
- 通过
Class实例
,调用getDeclaredFields()
获取class
字段信息,类型为Field[]
- 遍历属性字段数组,调用
getName(String param)
获取class的字段名称,调用get(class c)
方法获取class属性值
2)获取字段信息的方法总结
getName()
:返回字段名称getType()
::返回字段类型,也是一个Class实例
getModifiers()
:返回字段的修饰符,它是一个int
,不同的bit
表示不同的含义,private
为2
,public
为1
※ 注意事项
使用Field
一般只能用来获取public
修饰的字段信息,如果要获取private
修饰的字段需要加上field.setAccessible(true);
这样的语句,表示不管是不是public
修饰的字段,都一律允许访问。
3、总结
1、四种获取Field的方法
2、三个获取Field内容的方法
3、要获取private修饰字段要手动提前设置访问权限
4、反射是非常规方式,会破坏封装机制,有时候为了保证JVM核心的安全性,会出现禁止手动设置访问权限的问题