Java反射說(shuō)的是在運(yùn)行狀態(tài)中,對(duì)于任何一個(gè)類,我們都能夠知道這個(gè)類有哪些方法和屬性。很多深圳達(dá)內(nèi)教育的學(xué)員在面試中都會(huì)被問(wèn)到Java反射機(jī)制這個(gè)問(wèn)題,為了幫助大家更好的掌握這個(gè)知識(shí)點(diǎn),深圳達(dá)內(nèi)教育Java培訓(xùn)小編整理了一些資料分享給大家。
一、反射概念
在正式講解反射之前,為了很好的去理解它我們先從一個(gè)案例說(shuō)起。請(qǐng)看下面的代碼:
這是一個(gè)最簡(jiǎn)單不過(guò)的類,當(dāng)我們使用的時(shí)候直接new出來(lái)一個(gè)User對(duì)象即可。因?yàn)檫@個(gè)類是我們自己定義的,所以在使用的時(shí)候我們知道User有兩個(gè)字段name和age,還有無(wú)參和有參構(gòu)造方法,另外的test方法我們也可以直接調(diào)用(因?yàn)槠涫莗ublic)。
現(xiàn)在出現(xiàn)一個(gè)問(wèn)題,如果這個(gè)user類不是我們自己定義的,我們從外部看不到里面有什么東西,而且我們又想去知道內(nèi)部長(zhǎng)什么樣,比如說(shuō)有幾個(gè)字段、方法、構(gòu)造方法、共有還是私有的等等,這時(shí)候該怎么辦呢?這時(shí)候java語(yǔ)言在設(shè)計(jì)的時(shí)候?yàn)槲覀兲峁┝艘粋€(gè)機(jī)制,就是反射機(jī)制,他能夠很方便的去解決我們的問(wèn)題。
二、深入分析java反射機(jī)制
1、獲取Class類
在java中萬(wàn)事萬(wàn)物皆對(duì)象,Useruser=newUser()一行代碼我們知道了user是User類的實(shí)例對(duì)象,通過(guò)Studentstu=newStudent()我們知道了stu是Student的實(shí)例對(duì)象,但是我們想過(guò)沒(méi),User和Student又是誰(shuí)的對(duì)象呢?沒(méi)錯(cuò)就是Class類的實(shí)例對(duì)象。那這個(gè)Class類是什么東西,內(nèi)部長(zhǎng)什么樣子呢?這時(shí)候我們很自然的聯(lián)想到使用反射機(jī)制。使用反射機(jī)制就可以獲取到這個(gè)class。
這里有三種方式可以獲取這個(gè)Class,我們來(lái)看一下代碼:
上面的c1、c2、c3都是Class類的實(shí)例,表示的都是User類。
當(dāng)然,不僅僅是User這些類,對(duì)于基本數(shù)據(jù)類型甚至是包括void我們也可以使用這個(gè)方法。
現(xiàn)在就可以直接創(chuàng)建User類的實(shí)例了。
Useruser=(User)c1.getInstance();
現(xiàn)在我們對(duì)反射機(jī)制中獲取Class類的方法進(jìn)行一個(gè)總計(jì)
2、獲取類的方法
現(xiàn)在通過(guò)反射看一下User類內(nèi)部的樣子,打印一下(把這個(gè)操作封裝在了一個(gè)方法中):
下面我們把我們的User類傳進(jìn)去,打印一下。
我們總結(jié)一下反射方法。
3、獲取類的屬性
?。?)獲取所有屬性
上面有兩種獲取屬性的方法。重點(diǎn)是for循環(huán)。我們來(lái)測(cè)試一下
直接就會(huì)輸出我們的字段類型和名稱。
?。?)獲取指定屬性
在這里我們的User類中name、age字段增加getter和setter方法
然后我們測(cè)試一下
在這里,我們?cè)趐rintFieldMsgBySelf方法中通過(guò)反射重新設(shè)置了age年齡的值,輸出之后已成功更改。
4、獲取類的構(gòu)造方法
然后我們同樣的測(cè)試一下
跟我們之前的構(gòu)造方法一樣。
5、獲取User類的父類和接口
我們?cè)谶@里定義一個(gè)Human類(里面什么也沒(méi)有),然后定義一個(gè)UserInterface接口,讓User繼承它就好了。
然后我們?cè)赥est中去測(cè)試一下就可以了,測(cè)試方法很簡(jiǎn)單,我們只需要調(diào)用這個(gè)方法就可以。
在上面的案例中,我們使用反射機(jī)制能夠獲取類的方法、字段、構(gòu)造方法、父類和接口,當(dāng)然也可以獲取一些其他的信息。不知道你是否掌握了Java反射機(jī)制這一知識(shí)點(diǎn),想了解更多Java行業(yè)動(dòng)態(tài)和學(xué)習(xí)資料,可以關(guān)注“深圳達(dá)內(nèi)教育IT培訓(xùn)”官網(wǎng)Java資訊。