Java-Reflection

概念

主要是指程序可以訪問解取,檢測和修改它本身狀態(tài)或行為的一種能力冀自,并能根據(jù)自身行為的狀態(tài)和結果蜈膨,調整或修改應用所描述行為的狀態(tài)和相關的語義

反射機制:所謂的反射機制就是java語言在運行時擁有一項自觀的能力董朝。通過這種能力可以徹底的了解自身的情況為下一步的動作做準備猿诸。

Java的反射機制的實現(xiàn)要借助于4個類:class,Constructor稳析,F(xiàn)ield洗做,Method;

其中class代表的運行時類對象弓叛,Constructor-類的構造器對象,F(xiàn)ield-類的屬性對象诚纸,Method-類的方法對象撰筷。通過這四個對象我們可以粗略的看到一個類的各個組 成部分。

作用

反射可以讓我們在運行時獲取類的屬性畦徘,方法毕籽,構造方法、父類井辆、接口等信息关筒,通過反射還可以讓我們在運行期實例化對象、調用方法杯缺、即使方法或屬性是私有的的也可以通過反射的形式調用蒸播。

所有為什么第三方庫基本都會使用到反射,正是因為反射這種 “看透 Class” 的能力萍肆。

  • Java 反射機制主要提供了以下功能
    在運行時判斷任意一個對象所屬的類袍榆。
    在運行時構造任意一個類的對象。
    在運行時判斷任意一個類所具有的成員變量和方法塘揣。
    在運行時調用任意一個對象的方法

反射依賴于類元信息類-->class對象

  • 知道一個類蜡塌,直接獲取 Class 對象
    Class<?> cls1 = ReflectionActivity.class;
  • 如果已經得到了某個對象,可以通過這個對象獲取 Class 對象
    ReflectionActivity activity = new ReflectionActivity();
    Class<?> cls2 = activity.getClass();
  • 如果你在編譯期獲取不到目標類型勿负,但是你知道它的完整類路徑馏艾,那么你可以通過如下的形式來獲取 Class 對象,這樣獲取可能會拋出異常 ClassNotFoundException奴愉。
try {
    Class<?> cls3 = Class.forName("com.sun.study.ui.activity.ReflectionActivity");
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

類元信息類-->class對象提供的方法

得到構造器的方法

Constructor getConstructor(Class[] params) -- 獲得使用特殊的參數(shù)類型的公共構造函數(shù)琅摩,

Constructor[] getConstructors() -- 獲得類的所有公共構造函數(shù)

Constructor getDeclaredConstructor(Class[] params) -- 獲得使用特定參數(shù)類型的構造函數(shù)(與接入級別無關)

Constructor[] getDeclaredConstructors() -- 獲得類的所有構造函數(shù)(與接入級別無關)

獲得字段信息的方法

Field getField(String name) -- 獲得命名的公共字段

Field[] getFields() -- 獲得類的所有公共字段

Field getDeclaredField(String name) -- 獲得類聲明的命名的字段

Field[] getDeclaredFields() -- 獲得類聲明的所有字段

獲得方法信息的方法

Method getMethod(String name, Class[] params) -- 使用特定的參數(shù)類型,獲得命名的公共方法

Method[] getMethods() -- 獲得類的所有公共方法

Method getDeclaredMethod(String name, Class[] params) -- 使用特寫的參數(shù)類型锭硼,獲得類聲明的命名的方法

Method[] getDeclaredMethods() -- 獲得類聲明的所有方法

其他

getModifiers()和Modifier.toString():獲得屬修飾符房资,例如private,public檀头,static等
getReturnType():獲得方法的返回類型
getParameterTypes():獲得方法的參數(shù)類型

getConstructors():獲得類的public類型的構造方法轰异。
getConstructor(Class[] parameterTypes):獲得類的特定構造方法。

getSuperclass():獲取某類的父類
getInterfaces():獲取某類實現(xiàn)的接口

用處

http://www.imooc.com/article/19224

Ref:
https://www.zhihu.com/question/24304289
http://sunfusheng.com/java/2016/04/12/reflection-annotation-injection.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末暑始,一起剝皮案震驚了整個濱河市搭独,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌廊镜,老刑警劉巖牙肝,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡配椭,警方通過查閱死者的電腦和手機虫溜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來股缸,“玉大人衡楞,你說我怎么就攤上這事《匾觯” “怎么了瘾境?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長替劈。 經常有香客問我寄雀,道長得滤,這世上最難降的妖魔是什么陨献? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮懂更,結果婚禮上眨业,老公的妹妹穿的比我還像新娘。我一直安慰自己沮协,他們只是感情好龄捡,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著慷暂,像睡著了一般聘殖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上行瑞,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天奸腺,我揣著相機與錄音,去河邊找鬼血久。 笑死突照,一個胖子當著我的面吹牛,可吹牛的內容都是我干的氧吐。 我是一名探鬼主播讹蘑,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼筑舅!你這毒婦竟也來了座慰?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤翠拣,失蹤者是張志新(化名)和其女友劉穎角骤,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡邦尊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年背桐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蝉揍。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡链峭,死狀恐怖,靈堂內的尸體忽然破棺而出又沾,到底是詐尸還是另有隱情弊仪,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布杖刷,位于F島的核電站励饵,受9級特大地震影響,放射性物質發(fā)生泄漏滑燃。R本人自食惡果不足惜役听,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望表窘。 院中可真熱鬧典予,春花似錦、人聲如沸乐严。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昂验。三九已至捂敌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間既琴,已是汗流浹背占婉。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留呛梆,地道東北人锐涯。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像填物,于是被迫代替她去往敵國和親纹腌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內容

  • Java反射機制可以讓我們在編譯期(Compile Time)之外的運行期(Runtime)獲得任何一個類的字節(jié)碼...
    badcyc閱讀 573評論 0 0
  • Java反射機制可以讓我們在編譯期(Compile Time)之外的運行期(Runtime)獲得任何一個類的字節(jié)碼...
    總是擦破皮閱讀 32,583評論 6 28
  • 1. Java基礎部分 基礎部分的順序:基本語法滞磺,類相關的語法升薯,內部類的語法,繼承相關的語法击困,異常的語法涎劈,線程的語...
    子非魚_t_閱讀 31,659評論 18 399
  • 2016年4月14日蛛枚,注定是全世界NBA球迷的大日子谅海,告別科比還是沖擊記錄,這是大部分球迷頭痛的事蹦浦,但最頭痛的還是...
    Link001閱讀 2,389評論 30 48
  • 我家門前有條河扭吁,蜿蜿蜒蜒,流過整座城盲镶。城里春天種了許多桃李櫻樹侥袜,次第開過,便是一個夏季溉贿。秋風吹起來的時候枫吧,天空藍而...
    于洛閱讀 225評論 0 1