Java反射
[toc]
參考:
學(xué)習(xí)java應(yīng)該如何理解反射符糊?
總結(jié)
反射機(jī)制的定義:
是在運?狀態(tài)中子眶,對于任意的?個類吓懈,都能夠知道這個類的所有屬性和?法蝙眶;對任意?個對象都能夠通過反射機(jī)制調(diào)??個類的任意?法搔体。這種動態(tài)獲取類信息及動態(tài)調(diào)?類對象?法的功能稱為java的反射機(jī)制恨樟。
反射的作?:
在運行時判斷任意一個對象所屬的類;
在運行時構(gòu)造任意一個類的對象嫉柴;
在運行時判斷任意一個類所具有的成員變量和方法厌杜;
在運行時調(diào)用任意一個對象的方法;
生成動態(tài)代理计螺。
詳情
不使用反射機(jī)制:直接在代碼中new出自己需要的類夯尽,這種靜態(tài)編譯的方法會在編譯的時候綁定對象,雖然這樣運行起來比反射要快登馒,但是如果一旦需要在項目中修改某個類匙握,那么多則幾百處代碼都要修改一遍,而且這個類的方法和屬性也有可能要涉及修改陈轿,麻煩不斷圈纺,這絕對不是我們想要看到的。
使用反射機(jī)制:相比較靜態(tài)編譯反射機(jī)制是動態(tài)編譯麦射,在運行的時候確定類并且實例化蛾娶、調(diào)用方法。反射發(fā)揮了java編程的靈活性潜秋,如果此時類需要修改蛔琅,那么只需要修改最開始反射類的那一句話即可,或者如果你喜歡峻呛,甚至可以把有關(guān)反射的內(nèi)容單獨作為一個配置文件用xml寫出來罗售,如果需要修改辜窑,直接在配置文件中修改反射的類名即可。
問題一:那么什么是Java的反射呢寨躁?
大家都知道穆碎,要讓Java程序能夠運行,那么就得讓Java類要被Java虛擬機(jī)加載职恳。Java類如果不被Java虛擬機(jī)加載所禀,是不能正常運行的。現(xiàn)在我們運行的所有的程序都是在編譯期的時候就已經(jīng)知道了你所需要的那個類的已經(jīng)被加載了话肖。
Java的反射機(jī)制是在編譯并不確定是哪個類被加載了北秽,而是在程序運行的時候才動態(tài)加載。使用在編譯期并不知道的類最筒。這樣的特點就是反射贺氓。
那么Java反射有什么作用呢?
假如我們有兩個程序員床蜘,一個程序員在寫程序的時候辙培,需要使用第二個程序員所寫的類,但第二個程序員并沒完成他所寫的類邢锯。那么第一個程序員的代碼能否通過編譯呢扬蕊?這是不能通過編譯的。利用Java反射的機(jī)制丹擎,就可以讓第一個程序員在沒有得到第二個程序員所寫的類的時候尾抑,來完成自身代碼的編譯。