Java反射功能一会儿让Java语言灵活了起来,可是其中一些经常使用的API却容易记混,如getDeclaredField()与getField(),getDeclaredField()与getDeclaredFields(),看起来差很少,实际使用仍是有必定的差异的,下面咱们就来看看到底有什么区别: java
getDeclaredField(String name)
返回一个在类或接口中声明的成员属性的映射对象,参数name指定了成员属性的名称 数组
注意:该方法能够获取私有成员属性的映射对象,可是不能获取继承的成员属性的映射对象 spa
getDeclaredFields()
返回一个在类或接口中声明的全部成员属性的映射对象的数组 code
注意:访问限定符为public,protected,default access,private的成员属相的映射对象都会被返回,可是继承的成员属性除外,而且返回数组中的对象是无序且不分类的。 orm
getField(String name)
返回一个在类或接口中声明的公有(public)成员属性的映射对象,包括从父类或父接口中继承的成员属性,参数name指定了成员属性的名称 对象
getFields()返回一个在类或接口中声明的全部公有(public)成员属性的映射对象的数组,包括从父类或父接口中继承的成员属性
Class API | 全部成员属性 | 继承成员属性 | 私有成员属性 |
getDeclaredField() | 否 | 否 | 是 |
getField() | 否 | 是 | 否 |
getDeclaredFields() | 是 | 否 | 是 |
getFields() | 是 | 是 | 否 |
上面都是获取成员属性的API,其实获取成员方法的API与获取成员方法的API是相似的,出了方法名称有差异外, 继承
Class API | 全部成员方法 | 继承成员方法 | 私有成员方法 |
getDeclaredMethod() | 否 | 否 | 是 |
getMethod() | 否 | 是 | 否 |
getDeclaredMethods() | 是 | 否 | 是 |
getMethods() | 是 | 是 | 否 |
Class API | 全部构造方法 | 继承构造方法 | 私有构造方法 |
getDeclaredConstructor() | 否 | \ | 是 |
getConstructor() | 否 | \ | 否 |
getDeclaredConstructors() | 是 | \ | 是 |
getConstructors() | 是 | \ | 否 |