java反射機(jī)制

定義

JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意的一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法抵恋;對(duì)于任意的一個(gè)類,都能夠調(diào)用這個(gè)類的任意方法和屬性宝磨;這種動(dòng)態(tài)獲取信息以及動(dòng)態(tài)調(diào)用對(duì)象方法的功能稱為java語(yǔ)言的反射機(jī)制弧关;

用途

在日常的第三方應(yīng)用開(kāi)發(fā)過(guò)程中,經(jīng)常會(huì)遇到某個(gè)類的某個(gè)成員變量唤锉、方法世囊、構(gòu)造方法是私有的或是只對(duì)系統(tǒng)內(nèi)開(kāi)放,這時(shí)就可以利用java的反射機(jī)制通過(guò)反射來(lái)獲取所需的私有方法和屬性窿祥;但是也不是所有的的都適合反射株憾,對(duì)于沒(méi)有權(quán)限的應(yīng)用返回值是沒(méi)有任何意義的缺省值;

反射機(jī)制的相關(guān)類

  • class類:代表類的實(shí)體晒衩,在運(yùn)行的java應(yīng)用程序中表示類和接口嗤瞎;
  • field類:代表類的成員變量(成員變量也稱為類的屬性)
  • method類:代表類的方法;
  • constructor類:代表類的構(gòu)造方法听系;

class類

獲得類相關(guān)的方法

  • asSubclass(Class<U> clazz)把傳遞的類的對(duì)象轉(zhuǎn)換成代表其子類的對(duì)象贝奇;
  • cast 把對(duì)象轉(zhuǎn)換成代表類或是接口的對(duì)象;
  • getClassLoader() 獲得類的加載器跛锌;
  • getClasses() 返回一個(gè)數(shù)組弃秆,數(shù)組中包含該類中所有公共類和接口類的對(duì)象;
  • getDeclaredClasses() 返回一個(gè)數(shù)組髓帽,數(shù)組中包含該類中的所有類和接口類的對(duì)象菠赚;
  • forName(String className) 根據(jù)類名返回類的對(duì)象;
  • getName() 獲得類的完整路徑名字郑藏;
  • newInstance() 創(chuàng)建類的實(shí)例衡查;
  • getPackage()獲得類的包;
  • getSimpleName() 獲得類的名字必盖;
  • getSuperclass() 獲得當(dāng)前類繼承的父類的名字拌牲;
  • getInterfaces() 獲得當(dāng)前類實(shí)現(xiàn)的類或是接口俱饿;

獲得類中屬性相關(guān)的方法

  • getField(String name) 獲得某個(gè)共有的屬性對(duì)象;
  • getFields() 獲得所有共有的屬性對(duì)象塌忽;
  • getDeclaredField(String name) 獲得某個(gè)屬性對(duì)象拍埠;
  • getDeclaredFields() 獲得所有屬性對(duì)象;

獲得類中注解相關(guān)的方法土居;

  • getAnnotation(Class<U> annotationClass) 返回該類中與參數(shù)類型相匹配的共有注解對(duì)象枣购;
  • getAnnotations() 返回該類中所有的共有注解對(duì)象;
  • getDeclaredAnnotation(Class<U> annotationClass) 返回該類中于參數(shù)類型匹配的注解對(duì)象擦耀;
  • getDeclaredAnnotations() 返回該類中所有的注解對(duì)象棉圈;

獲得類中構(gòu)造器相關(guān)的方法;

  • getConstructor(Class..<?> parameterTypes)獲得該類中與參數(shù)類型匹配的共有構(gòu)造方法眷蜓;
  • getConstructors() 獲得該類的所有共有構(gòu)造方法分瘾;
  • getDeclaredContructor(Class..<?> parameterTypes) 獲得該類中與參數(shù)類型匹配的構(gòu)造方法;
  • getDeclaredConstructor()獲得該類中所有構(gòu)造方法吁系;

獲得類中方法的相關(guān)方法德召;

  • getMethod(String name,Class..<U> parameterTypes) 獲得該類中的某個(gè)共有方法;
  • getMethods() 獲得該類中的所有共用方法垮抗;
  • getDeclaredMethod(String name,Class..<U> parameterTypes) 獲得該類中的某個(gè)方法氏捞;
  • getDeclaredMethods() 獲得該類中的所有方法;

類中其他的重要方法冒版;

  • isAnnotation()如果是注解類型則返回true;
  • isAnnotationPresent(Class<? extends Annotation> annotationClass)如果是指定類型的注解則返回true逞姿;
  • isAnonymousClass() 如果是匿名內(nèi)部類則返回true辞嗡;
  • isArray() 如果是一個(gè)數(shù)組類型則放回true;
  • isEnum()如果是枚舉類型則返回true滞造;
  • isInstance(Object obj)如果是obj是當(dāng)前類的實(shí)例則返回true续室;
  • isInterface()如果當(dāng)前類是接口類型則返回true;
  • isLocalClass()如果是局部類則返回true谒养;
  • isMemberClass() 如果是內(nèi)部類則返回true挺狰;

filed類

  • equals(Object obj)屬性和obj相等則返回true;
  • get(Object obj)獲取obj中對(duì)應(yīng)的屬性值买窟;
  • set(Object obj丰泊,Object value)設(shè)置obj中對(duì)應(yīng)屬性的值

Method 類

  • invoke(Object obj,Object... args)傳遞object對(duì)象及參數(shù)調(diào)用該對(duì)象的方法始绍;

constructor類

  • newInstance(Object initargs) 根據(jù)傳遞的參數(shù)創(chuàng)建類的對(duì)象瞳购;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市亏推,隨后出現(xiàn)的幾起案子学赛,更是在濱河造成了極大的恐慌年堆,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盏浇,死亡現(xiàn)場(chǎng)離奇詭異变丧,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)绢掰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門痒蓬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人曼月,你說(shuō)我怎么就攤上這事谊却。” “怎么了哑芹?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵炎辨,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我聪姿,道長(zhǎng)碴萧,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任末购,我火速辦了婚禮破喻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘盟榴。我一直安慰自己曹质,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布擎场。 她就那樣靜靜地躺著羽德,像睡著了一般。 火紅的嫁衣襯著肌膚如雪迅办。 梳的紋絲不亂的頭發(fā)上宅静,一...
    開(kāi)封第一講書(shū)人閱讀 49,929評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音站欺,去河邊找鬼姨夹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛矾策,可吹牛的內(nèi)容都是我干的磷账。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蝴韭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼够颠!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起榄鉴,我...
    開(kāi)封第一講書(shū)人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤履磨,失蹤者是張志新(化名)和其女友劉穎蛉抓,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體剃诅,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡巷送,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了矛辕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笑跛。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖聊品,靈堂內(nèi)的尸體忽然破棺而出飞蹂,到底是詐尸還是另有隱情,我是刑警寧澤翻屈,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布陈哑,位于F島的核電站,受9級(jí)特大地震影響伸眶,放射性物質(zhì)發(fā)生泄漏惊窖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一厘贼、第九天 我趴在偏房一處隱蔽的房頂上張望界酒。 院中可真熱鬧,春花似錦嘴秸、人聲如沸毁欣。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)署辉。三九已至,卻和暖如春岩四,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背哥攘。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工剖煌, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逝淹。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓耕姊,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親栅葡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子茉兰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

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