Java反射是什么?
JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調(diào)用它的任意一個方法;這種動態(tài)獲取的信息以及動態(tài)調(diào)用對象的方法的功能稱為java語言的反射機(jī)制。
Java反射機(jī)制主要提供了以下功能: 在運(yùn)行時判斷任意一個對象所屬的類;在運(yùn)行時構(gòu)造任意一個類的對象;在運(yùn)行時判斷任意一個類所具有的成員變量和方法;在運(yùn)行時調(diào)用任意一個對象的方法;生成動態(tài)代理。
輔助理解反射:
靜態(tài)編譯:在編譯時確定類型,綁定對象。
動態(tài)編譯:運(yùn)行時確定類型,綁定對象。動態(tài)編譯最大限度發(fā)揮了java的靈活性,體現(xiàn)了多態(tài)的應(yīng)用,有以降低類之間的藕合性。
我們可以明確的看出動態(tài)編譯的好處,而反射就是運(yùn)用了動態(tài)編譯創(chuàng)建對象。
例一:
開發(fā)中,我們需要把一個包中的class new出來,但是這個包中的類總是需要變動,那么怎么辦,難道總是修改main方法中xxx=new xxx()嗎。這樣無疑是麻煩的。而運(yùn)用反射。我們可以相應(yīng)的增加一個配置文件,在里面記錄包中所有的類名,包中類增加時就加一個類名,刪除時就刪除一個類名。讓main方法去讀取這個配置文件中的類名,通過反射獲得實(shí)例,完全不用我們?nèi)バ薷膍ain方法中的代碼。
例二:
大家如果接觸過spring,會發(fā)現(xiàn)當(dāng)你配置各種各樣的bean時,是以配置文件的形式配置的,你需要用到哪些bean就配哪些,spring容器就會根據(jù)你的需求去動態(tài)加載。不改變程序源碼,而往往改變原有正確代碼是一種十分危險的行為。
WRITE-BUG研發(fā)團(tuán)隊衷心希望【W(wǎng)RITE-BUG數(shù)字空間】可以給每位同學(xué)一個屬于自己的秘密空間,同時祝愿大家在“公開圈子”世界里,遇見志同道合的伙伴們,因?yàn)槲覀兣c大家一樣,都曾孤獨(dú)前行著。


