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() | 是 | \ | 否 |