Java反射詳解

一则拷、簡介

Java在編譯時(shí)候就必須知道所引用的類所在地方煌茬,但是在實(shí)際編程中坛善,在某些場(chǎng)合浑吟,可能需要引用一個(gè)并不在編譯空間的類组力,這個(gè)時(shí)候常規(guī)方法就很難實(shí)現(xiàn)了燎字。在Java中笼蛛,Class配合反射能夠很好的解決這種場(chǎng)景滨砍。Java里面的反射可以幫助我們?cè)谶\(yùn)行程序時(shí)候加載惋戏、使用編譯期間完全未知的class响逢,簡單來說就是Java可以加載一個(gè)運(yùn)行時(shí)候才得知名稱的class舔亭,獲得其完整的構(gòu)造钦铺,并生成實(shí)例化對(duì)象,對(duì)其成員變量賦值缚甩,調(diào)用其方法等等窑邦。


二郊丛、說明?

反射機(jī)制中會(huì)用到一些類厉熟,在了解反射是如何使用之前揍瑟,先介紹一下這些類乍炉。

Class在反射中表示內(nèi)存中的一個(gè)Java類,Class可以代表的實(shí)例類型包括巢株,類和接口阁苞、基本數(shù)據(jù)類型、數(shù)組

ObjectJava中所有類的超類

Constructor封裝了類的構(gòu)造函數(shù)的屬性信息,包括訪問權(quán)限和動(dòng)態(tài)調(diào)用信息

Field提供類或接口的成員變量屬性信息软瞎,包括訪問權(quán)限和動(dòng)態(tài)修改

Method提供類或接口的方法屬性信息,包括訪問權(quán)限和動(dòng)態(tài)調(diào)用信息

Modifier封裝了修飾屬性魔慷, public蜻展、protected纵顾、static施逾、final、synchronized蠕搜、abstract等讥脐。

三旬渠、獲取屬性

1枪蘑、基類或者接口

最基本的,可以通過反射岖免,來獲取一個(gè)類的基類或者實(shí)現(xiàn)的接口话侧,使用getSuperclass()或者該類的基類瞻鹏,使用getInterfaces()來獲取該類實(shí)現(xiàn)的接口。直接看一下例子。

2埂淮、構(gòu)造函數(shù)

直接上代碼:

getConstructors():獲取的構(gòu)造函數(shù)全部是public屬性的樟澜,不包含父類霹俺。

getConstuctor(Class … params):根據(jù)參數(shù),從所有public屬性的構(gòu)造函數(shù)中獲取相關(guān)構(gòu)造函數(shù)想际。

getDeclaredConstructors():獲取所有的構(gòu)造函數(shù),不包含父類

getDelaredConstructor(Class … params):根據(jù)參數(shù),從所有的構(gòu)造函數(shù)中獲取相關(guān)構(gòu)造函數(shù)。 不包含父類咒锻。


3拇泛、方法

在Java中,一般通過getMethods()或者getDeclaredMethod()方法來獲取類中定義的方法。直接看一下這二個(gè)方法執(zhí)行的例子。


-getMethods()??返回類中所有的public屬性的方法,包括從基類繼承的public方法搬俊。

-getDeclaredMethods()??返回類本身聲明的方法,包括復(fù)寫的方法檀葛,不包括從基類繼承的方法

-getMethod(name玩祟,params)根據(jù)參數(shù)從getMethods()返回的結(jié)果中篩選

-getDeclaredMethod(name, params)根據(jù)參數(shù)從getDeclaredMethods()返回的結(jié)果中篩選


4转锈、成員變量

成員變量獲取和上面類似盘寡,主要方法有g(shù)etFields()宴抚、getDeclaredFields()甫煞、getMethod(name, params)、getDeclaredMethod(name, params)四種方法楷力。


四個(gè)方法的具體區(qū)別:

-getFields()? ?獲取類的所有public屬性的成員變量检柬,包括繼承類和基類

-getDeclaredFields()? ?獲取類的所有成員變量(不包含父類和基類等)

-getMethod(name, params)根據(jù)參數(shù)在getFields()獲取的成員變量中進(jìn)行篩選

-getDeclaredMethod(name, params)根據(jù)參數(shù)在getDeclaredFields()獲取的成員變量中進(jìn)行篩選

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末里逆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖脾还,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異鄙漏,居然都是意外死亡嗤谚,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門怔蚌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來巩步,“玉大人,你說我怎么就攤上這事桦踊∫我埃” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵籍胯,是天一觀的道長竟闪。 經(jīng)常有香客問我,道長杖狼,這世上最難降的妖魔是什么炼蛤? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮蝶涩,結(jié)果婚禮上理朋,老公的妹妹穿的比我還像新娘。我一直安慰自己子寓,他們只是感情好暗挑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布笋除。 她就那樣靜靜地躺著斜友,像睡著了一般。 火紅的嫁衣襯著肌膚如雪垃它。 梳的紋絲不亂的頭發(fā)上鲜屏,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音国拇,去河邊找鬼洛史。 笑死,一個(gè)胖子當(dāng)著我的面吹牛酱吝,可吹牛的內(nèi)容都是我干的也殖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼忆嗜!你這毒婦竟也來了己儒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤捆毫,失蹤者是張志新(化名)和其女友劉穎闪湾,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绩卤,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡途样,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了濒憋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片何暇。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖跋炕,靈堂內(nèi)的尸體忽然破棺而出赖晶,到底是詐尸還是另有隱情,我是刑警寧澤辐烂,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布遏插,位于F島的核電站,受9級(jí)特大地震影響纠修,放射性物質(zhì)發(fā)生泄漏胳嘲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一扣草、第九天 我趴在偏房一處隱蔽的房頂上張望了牛。 院中可真熱鬧,春花似錦辰妙、人聲如沸鹰祸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛙婴。三九已至,卻和暖如春尔破,著一層夾襖步出監(jiān)牢的瞬間街图,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國打工懒构, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留餐济,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓胆剧,卻偏偏與公主長得像絮姆,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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

  • 轉(zhuǎn)載注明出處:http://www.reibang.com/p/2f488de72886 簡介 Java在編譯時(shí)候...
    王三的貓阿德閱讀 1,046評(píng)論 0 2
  • 反射(Reflection)能夠讓運(yùn)行于 JVM 中的程序檢測(cè)和修改運(yùn)行時(shí)的行為篙悯。 Class類提供了以下方法 四...
    一只好奇的茂閱讀 362評(píng)論 0 17
  • 一冤灾、什么是反射? “反射(Reflection)能夠讓運(yùn)行于JVM中的程序檢測(cè)和修改運(yùn)行時(shí)的行為辕近。反射用于在運(yùn)行時(shí)...
    Q南南南Q閱讀 478評(píng)論 0 1
  • 一:java概述:1韵吨,JDK:Java Development Kit,java的開發(fā)和運(yùn)行環(huán)境移宅,java的開發(fā)工...
    ZaneInTheSun閱讀 2,649評(píng)論 0 11
  • 今天聽錄音再次聽到了紫雨老師講的關(guān)于借事練心的詳細(xì)的解釋归粉,被老師的智慧再次的深深的震撼到了,我當(dāng)時(shí)在去往取...
    憨人崔閱讀 404評(píng)論 0 1