对任意的一个Object实例,只要我们获取了它的Class,就可以获取它的一切信息。
Class类提供了以下几个方法来获取字段:
- Field getField(name):根据字段名获取某个public的field(包括父类)
- Field.getDeclaredField(name):根据字段名获取当前类的某个field(不包括父类)
- Field[] getFields():获取所有public的field(包括父类)
- Field[] getDeclaredFields():获取当前类的所有field(不包括父类)
获取字段值
- 利用反射拿到字段的一个Field实例只是第一步,我们还可以拿到一个实例对应的该字段的值。
- 调用Field.setAccessible(true)的意思是,别管这个字段是不是public,一律允许访问。
- 加上Field.setAccessible(true)方法,再运行代码,就可以打印出private字段的值。
设置字段值
- 通过Field实例既然可以获取到指定实例的字段值,自然也可以设置字段的值。