反射機(jī)制(筆記)

來源:拉勾教育Java就業(yè)集訓(xùn)營

基本概念

  • 通常情況下編寫代碼都是固定的苔严,無論運(yùn)行多少次執(zhí)行的結(jié)果也是固定的篡悟,在某些特殊場合中編寫 代碼時(shí)不確定要創(chuàng)建什么類型的對象修噪,也不確定要調(diào)用什么樣的方法娘侍,這些都希望通過運(yùn)行時(shí)傳遞 的參數(shù)來決定奕巍,該機(jī)制叫做動態(tài)編程技術(shù)呵燕,也就是反射機(jī)制。
  • 通俗來說貌夕,反射機(jī)制就是用于動態(tài)創(chuàng)建對象并且動態(tài)調(diào)用方法的機(jī)制律歼。
  • 目前主流的框架底層都是采用反射機(jī)制實(shí)現(xiàn)的。
  • 如: Person p = new Person(); - 表示聲明Person類型的引用指向Person類型的對象 p.show(); - 表示調(diào)用Person類中的成員方法show

Class類

基本概念
  • java.lang.Class類的實(shí)例可以用于描述Java應(yīng)用程序中的類和接口啡专,也就是一種數(shù)據(jù)類型险毁。
  • 該類沒有公共構(gòu)造方法,該類的實(shí)例由Java虛擬機(jī)和類加載器自動構(gòu)造完成们童,本質(zhì)上就是加載到內(nèi) 存中的運(yùn)行時(shí)類畔况。
獲取Class對象的方式
  • 使用數(shù)據(jù)類型.class的方式可以獲取對應(yīng)類型的Class對象(掌握)。
  • 使用引用/對象.getClass()的方式可以獲取對應(yīng)類型的Class對象慧库。
  • 使用包裝類.TYPE的方式可以獲取對應(yīng)基本數(shù)據(jù)類型的Class對象跷跪。
  • 使用Class.forName()的方式來獲取參數(shù)指定類型的Class對象(掌握)。
  • 使用類加載器ClassLoader的方式獲取指定類型的Class對象齐板。
常用的方法(掌握)
方法聲明 功能介紹
static Class forName(String className) 用于獲取參數(shù)指定類型對應(yīng)的Class對象并返回
T newInstance() 用于創(chuàng)建該Class對象所表示類的新實(shí)例

Constructor類

基本概念

java.lang.reflect.Constructor類主要用于描述獲取到的構(gòu)造方法信息

Class類的常用方法
方法聲明 功能介紹
Constructor getConstructor(Class... parameterTypes) 用于獲取此Class對象所表示類型中參數(shù)指定的公共構(gòu)造方法
Constructor[] getConstructors() 用于獲取此Class對象所表示類型中所有的公共構(gòu)造方法
Constructor類的常用方法
方法聲明 功能介紹
T newInstance(Object... initargs) 使用此Constructor對象描述的構(gòu)造方法來構(gòu)造Class對象代表類 型的新實(shí)例
int getModifiers() 獲取方法的訪問修飾符
String getName() 獲取方法的名稱
Class[] getParameterTypes() 獲取方法所有參數(shù)的類型

Field類

基本概念

java.lang.reflect.Field類主要用于描述獲取到的單個(gè)成員變量信息吵瞻。

Class類的常用方法
方法聲明 功能介紹
Field getDeclaredField(String name) 用于獲取此Class對象所表示類中參數(shù)指定的單個(gè)成員變量信息,不能訪問私有的變量甘磨,訪問私有變量需要setAccessible(true)
Field[] getDeclaredFields() 用于獲取此Class對象所表示類中所有成員變量信息
Field類的常用方法
方法聲明 功能介紹
Object get(Object obj) 獲取參數(shù)對象obj中此Field對象所表示成員變量的數(shù)值
void set(Object obj, Object value) 將參數(shù)對象obj中此Field對象表示成員變量的數(shù)值修改為參數(shù) value的數(shù)值
void setAccessible(boolean flag) 當(dāng)實(shí)參傳遞true時(shí)橡羞,則反射對象在使用時(shí)應(yīng)該取消 Java 語言訪問檢查
int getModifiers() 獲取成員變量的訪問修飾符
Class getType() 獲取成員變量的數(shù)據(jù)類型
String getName() 獲取成員變量的名稱

Method類

基本概念

java.lang.reflect.Method類主要用于描述獲取到的單個(gè)成員方法信息。

Class類的常用方法
方法聲明 功能介紹
Method getMethod(String name, Class... parameterTypes) 用于獲取該Class對象表示類中名字為name參數(shù)為 parameterTypes的指定公共成員方法
Method[] getMethods() 用于獲取該Class對象表示類中所有公共成員方法
Method類的常用方法
方法聲明 功能介紹
Object invoke(Object obj, Object... args) 使用對象obj來調(diào)用此Method對象所表示的成員方法济舆,實(shí) 參傳遞args
int getModifiers() 獲取方法的訪問修飾符
Class getReturnType() 獲取方法的返回值類型
String getName() 獲取方法的名稱
Class[] getParameterTypes() 獲取方法所有參數(shù)的類型
Class[] getExceptionTypes() 獲取方法的異常信息

獲取其它結(jié)構(gòu)信息

方法聲明 功能介紹
Package getPackage() 獲取所在的包信息
Class getSuperclass() 獲取繼承的父類信息
Class[] getInterfaces() 獲取實(shí)現(xiàn)的所有接口
Annotation[] getAnnotations() 獲取注解信息
Type[] getGenericInterfaces() 獲取泛型信息
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末卿泽,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子滋觉,更是在濱河造成了極大的恐慌签夭,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件椎侠,死亡現(xiàn)場離奇詭異第租,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)我纪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門慎宾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來儡羔,“玉大人,你說我怎么就攤上這事璧诵。” “怎么了仇冯?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵之宿,是天一觀的道長。 經(jīng)常有香客問我苛坚,道長比被,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任泼舱,我火速辦了婚禮等缀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘娇昙。我一直安慰自己尺迂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布冒掌。 她就那樣靜靜地躺著噪裕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪股毫。 梳的紋絲不亂的頭發(fā)上膳音,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機(jī)與錄音铃诬,去河邊找鬼祭陷。 笑死,一個(gè)胖子當(dāng)著我的面吹牛趣席,可吹牛的內(nèi)容都是我干的兵志。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼吩坝,長吁一口氣:“原來是場噩夢啊……” “哼毒姨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起钉寝,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤弧呐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后嵌纲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體俘枫,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年逮走,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鸠蚪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖茅信,靈堂內(nèi)的尸體忽然破棺而出盾舌,到底是詐尸還是另有隱情,我是刑警寧澤蘸鲸,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布妖谴,位于F島的核電站,受9級特大地震影響酌摇,放射性物質(zhì)發(fā)生泄漏膝舅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一窑多、第九天 我趴在偏房一處隱蔽的房頂上張望仍稀。 院中可真熱鬧,春花似錦埂息、人聲如沸技潘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽崭篡。三九已至,卻和暖如春吧秕,著一層夾襖步出監(jiān)牢的瞬間琉闪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工砸彬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留颠毙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓砂碉,卻偏偏與公主長得像蛀蜜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子增蹭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容