更新時(shí)間:2019-09-30 10:17:39 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2681次
反射是Java中核心技術(shù)之一,這里先不定義什么叫反射,先看一個(gè)例子
要求:
1)創(chuàng)建一個(gè)person的實(shí)例,單不能使用Personperson=newPerson()的方式
2)調(diào)用run()方法,也不能使用person.run()方式
我們知道要調(diào)用方法必須先要有對(duì)象,現(xiàn)在不能通過(guò)new關(guān)鍵字來(lái)實(shí)例化對(duì)象,只能通過(guò)反射來(lái)實(shí)現(xiàn)。
上面就實(shí)現(xiàn)用反射的方式調(diào)用preson類中的方法。可能有人要問(wèn)了,為什么不直接new出來(lái)呢?通過(guò)反射來(lái)創(chuàng)建對(duì)象,調(diào)用方法多費(fèi)勁啊?
關(guān)鍵在于很多時(shí)候我們并不能事先知道要new什么對(duì)象,相反我們可能只知道一個(gè)類的名稱和方法名,很多時(shí)候這些名稱都是寫(xiě)在XML配置當(dāng)中的。
好多框架中用到了反射,比如sturts,spring,hibernate等,下面舉幾個(gè)列子說(shuō)明
【Strust2】
在struts.xml中配置的action
定義的action
Struts2框架本身不知道我們有一個(gè)TopicAction這個(gè)類,但它可以這樣做,在struts2框架初始化的時(shí)候解析你配置的xml,再找到你配置TopicAction,然后通過(guò)反射的技術(shù)實(shí)例化這個(gè)類,等在有人調(diào)用的時(shí)候通過(guò)反射調(diào)用topicAction中的方法。
【Hibernate】
文件的定義
在映射文件中建立了數(shù)據(jù)表和對(duì)象的映射關(guān)系,所以我們?cè)趆ibernate中操作的都是對(duì)象,但是底層都會(huì)轉(zhuǎn)成sql執(zhí)行,比如我們要查詢一個(gè)對(duì)象,
Topictopic=session.get(Topic.class,12);
執(zhí)行過(guò)程是這樣的:
【類名】==>【表明】==>【發(fā)出sql語(yǔ)句】==>【通過(guò)反射實(shí)例化對(duì)象】==>【通過(guò)反射調(diào)用setXxx()方法把數(shù)據(jù)庫(kù)的值設(shè)進(jìn)入】
總結(jié)一下,反射就是在編譯期不知道創(chuàng)建那個(gè)類,而是在運(yùn)行期才知道創(chuàng)建那個(gè)類,這種情況下就應(yīng)該考慮到用反射。
那反射能做什么呢?
1)獲取一個(gè)類的內(nèi)部結(jié)構(gòu),比如:方法,屬性,注解等
2)運(yùn)行時(shí)對(duì)一個(gè)Java對(duì)象操作,包括實(shí)例化對(duì)象,調(diào)用方法,給屬性賦值。
為什么叫反射呢?
可能是Java程序在運(yùn)行時(shí)能夠看到自己的結(jié)構(gòu)和行為吧,就像看到鏡子當(dāng)中的自己一樣,反射了出來(lái)。
以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)小編介紹的“Java基礎(chǔ)教程之Java反射”的內(nèi)容,希望對(duì)大家有幫助,更多java最新資訊請(qǐng)繼續(xù)關(guān)注動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)官網(wǎng),每天會(huì)有精彩內(nèi)容分享與你。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743