Java基礎(chǔ)學(xué)習(xí):java反射實(shí)現(xiàn)機(jī)制

Java基礎(chǔ)學(xué)習(xí):java反射實(shí)現(xiàn)機(jī)制

長(zhǎng)沙一度軟件培訓(xùn)      2022-04-13 12:56:02     3

Java基礎(chǔ)學(xué)習(xí):java反射實(shí)現(xiàn)機(jī)制,反射(Reflection)是Java程序開發(fā)語(yǔ)言的特征之一,它允許運(yùn)行中的Java程序?qū)ψ陨磉M(jìn)行檢查,或者說自審,并能直接操作程序的內(nèi)部

課程價(jià)格 請(qǐng)咨詢

上課時(shí)段: 授課校區(qū):

詳細(xì)介紹

    反射(Reflection)是Java程序開發(fā)語(yǔ)言的特征之一,它允許運(yùn)行中的Java程序?qū)ψ陨磉M(jìn)行檢查,或者說“自審”,并能直接操作程序的內(nèi)部屬性和方法。

    反射是一項(xiàng)高級(jí)開發(fā)人員應(yīng)該掌握的“黑科技”,其實(shí)反射并不是Java獨(dú)有的,許多編程語(yǔ)言都提供了反射功能。在面試中面試官也經(jīng)常對(duì)反射問題進(jìn)行考察,反射是所有注解實(shí)現(xiàn)的原理,尤其在框架設(shè)計(jì)中,有不可替代的作用。

    關(guān)于反射,常見的面試考察點(diǎn)包括:

    如何反射獲取Class對(duì)象

    如何反射獲取類中的所有字段

    如何反射獲取類中的所有構(gòu)造方法

    如何反射獲取類中的所有非構(gòu)造方法

    本篇我們就一起來學(xué)習(xí)一下Java反射機(jī)制。

    一、反射是什么?

    反射的概念是由Smith在1982年首次提出的,主要是指程序可以訪問、檢測(cè)和修改它本身狀態(tài)或行為的一種能力。

    通俗地講,一提到反射,我們就可以想到鏡子。鏡子可以明明白白地照出我是誰(shuí),還可以照出別人是誰(shuí)。反映到程序中,反射就是用來讓開發(fā)者知道這個(gè)類中有什么成員,以及別的類中有什么成員。

    二、為什么要有反射

    有的同學(xué)可能會(huì)疑惑,Java已經(jīng)有了封裝為什么還要有反射呢?反射看起來像是破壞了封裝性。甚至讓私有變量都可以被外部訪問到,使得類變得不那么安全了。

    我們來看一下Oracle官方文檔中對(duì)反射的描述:

    UsesofReflection

    ReflectioniscommonlyusedbyprogramswhichrequiretheabilitytoexamineormodifytheruntimebehaviorofapplicationsrunningintheJavavirtualmachine.Thisisarelativelyadvancedfeatureandshouldbeusedonlybydeveloperswhohaveastronggraspofthefundamentalsofthelanguage.Withthatcaveatinmind,reflectionisapowerfultechniqueandcanenableapplicationstoperformoperationswhichwouldotherwisebeimpossible.

    ExtensibilityFeatures

    Anapplicationmaymakeuseofexternal,user-definedclassesbycreatinginstancesofextensibilityobjectsusingtheirfully-qualifiednames.

    ClassBrowsersandVisualDevelopmentEnvironments

Aclassbrowserneedstobeabletoenumeratethemembersofclasses.Visualdevelopmentenvironmentscanbenefitfrommakinguseoftypeinformationavailableinreflectiontoaidthedeveloperinwritingcorrectcode.

    DebuggersandTestTools

 Debuggersneedtobeabletoexamineprivatemembersonclasses.TestharnessescanmakeuseofreflectiontosystematicallycalladiscoverablesetAPIsdefinedonaclass,toinsureahighlevelofcodecoverageinatestsuite.

    從Oracle官方文檔中可以看出,反射主要應(yīng)用在以下幾方面:

    反射讓開發(fā)人員可以通過外部類的全路徑名創(chuàng)建對(duì)象,并使用這些類,實(shí)現(xiàn)一些擴(kuò)展的功能。

    反射讓開發(fā)人員可以枚舉出類的全部成員,包括構(gòu)造函數(shù)、屬性、方法。以幫助開發(fā)者寫出正確的代碼。

    測(cè)試時(shí)可以利用反射API訪問類的私有成員,以保證測(cè)試代碼覆蓋率。

    也就是說,Oracle希望開發(fā)者將反射作為一個(gè)工具,用來幫助程序員實(shí)現(xiàn)本不可能實(shí)現(xiàn)的功能(performoperationswhichwouldotherwisebeimpossible)。正如《人月神話》一書中所言:軟件工程沒有銀彈。很多程序架構(gòu),尤其是三方框架,無(wú)法保證自己的封裝是完美的。如果沒有反射,對(duì)于外部類的私有成員,我們將一籌莫展,所以我們有了反射這一后門,為程序設(shè)計(jì)提供了更大的靈活性。工具本身并沒有錯(cuò),關(guān)鍵在于如何正確地使用。

 以上就是長(zhǎng)沙一度軟件培訓(xùn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java基礎(chǔ)學(xué)習(xí):java反射實(shí)現(xiàn)機(jī)制”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。

Java基礎(chǔ)學(xué)習(xí)

培訓(xùn)啦提醒您:交易時(shí)請(qǐng)核實(shí)對(duì)方資質(zhì),對(duì)于過大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險(xiǎn),謹(jǐn)防上當(dāng)。