Java反射之類成員

上一篇文章我們講了怎麼獲取到類的標識符,比如類的訪問權限、接口標識、static標識,final標識、strictfp標識等,下面我們繼續跟着官方文檔講解一下怎麼獲取類的成員,類成員包括以下三種:成員變量、類方法(實例方法和類方法)、構造器(構造方法)。

獲取方式

爲了更好的描述,我們做個約定個通配符XXXX,如果是成員變量就代表Field,如果是類方法就代表Method,如果是構造器就代表Constructor。
那麼怎麼獲取到這三類成員呢?
獲取單個的成員的方式用: getXXXX()和getDeclaredXXXX();
列舉多個成員的方式用: getXXXXs()和getDeclaredXXXXs();

getXXXX和getDeclared的區別

那麼他們有什麼區別呢?
簡單的來說普通的方式(不帶Declared)獲取類的公共(public)的成員,包括父類,帶有Declared的方式獲取類的所有申明的成員,即包括public、private和protected聲明的成員,不包括父類的申明字段。
那麼就有人疑問那怎麼獲取到父類的成員呢?當然是獲取到父類的Class之後,通父類的Class調用這兩類方法獲取。
普通的方式是比較常用的方式,反射本身就破壞封裝的一種方式,爲了減少這種破壞,我們應該操作public成員即可。
具體的區別如下:

獲取成員變量

Class的API方法 是否可以列舉 是否能列舉繼承類的成員 是否能列舉私有成員
getDeclaredField()
getField()
getDeclaredFields()
getFields()

獲取成員方法

Class的API方法 是否可以列舉 是否能列舉繼承類的成員 是否能列舉私有成員
getDeclaredMethod()
getMethod()
getDeclaredMethods()
getMethods()

獲取構造器

Class的API方法 是否可以列舉 是否能列舉繼承類的成員 是否能列舉私有成員
getDeclaredConstructor()
getConstructor()
getDeclaredConstructors()
getConstructors()

類成員的Class

getXXXX()和getDeclaredXXXX()獲取到的類也就是類成員的Class,對應的Class如下.
成員變量: java.lang.reflect.Field
成員方法: java.lang.reflect.Method
構造器方法: java.lang.reflect.Constructor
後面會分爲三章分別解釋一下對應的用法。

發佈了131 篇原創文章 · 獲贊 35 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章