反射,基于类的运行时信息,通过类加载后的Class对象,获取类的方法,属性,利用Class对象调用方法和修改属性。
本节主要说下Field这个类,代表类的属性,包括实例字段和静态字段。
如果获取Field对象呢,主要通过Class对象的方法:
Class.getFields(), Class.getField(String),
Class.getDeclaredFields(), Class.getDeclaredField(String)
获取字段
从方法签名上看应该是2类方法,getField和getDeclaredField,这两类有什么区别呢?
1. getField
getField方法用获取public类型的字段(包括父类或者接口的字段),策略如下:
首先会在当前类中申明的public字段中查找,如果没有就递归查找接口中的字段,如果没有找到继续递归找父类中的public字段,如果还没找到,那么会抛出异常NoSuchFieldException。
当字段名相同时,getField方法会按照上面的顺序获取第一个遇到的字段。