一、什么是反射?
對于程序員來說,應(yīng)該很少需要直接使用反射工具;之所以在語言中提供它們,是為了支持其他Java特性,比如對象序列化、JavaBeans以及RMI。還有就是在很多框架中,也是應(yīng)用到了反射機制。
在初學(xué)時,只知道這是個生成驅(qū)動實例的語句,而這其實就是應(yīng)用了反射
二、反射能做什么?
主要的四個功能:
-獲取對象所屬的類
-獲取類的成員變量、方法
-運行時創(chuàng)建對象
-運行時調(diào)用對象的方法
其它功能
可用構(gòu)建器創(chuàng)建新對象,通過Constructor類取得其它類的構(gòu)造函數(shù)
用get()和set()方法讀取和修改與Field對象關(guān)聯(lián)的字段
用invoke()方法調(diào)用與Method對象關(guān)聯(lián)的方法,即調(diào)用其他類的方法
此外,我們可調(diào)用方法getFields(),getMethods(),getConstructors(),分別返回用于表示字段、方法以及構(gòu)建器的對象數(shù)組,取得并修改數(shù)組的信息
取得其他類的父類、實現(xiàn)的接口、權(quán)限修飾符、屬性類型等
三、反射的優(yōu)缺點
優(yōu)點:可以實現(xiàn)運行時動態(tài)創(chuàng)建對象,增加程序的靈活性。這種靈活性怎么體現(xiàn)的呢?比如我們在開發(fā)一個大型的軟件,編譯發(fā)布后,我們很可能需要更新一些功能,但因為軟件已發(fā)布,我們肯定不能要求用戶把以前的卸載,再重新安裝新的版本。如果我們采用靜態(tài)的解決方法的話,需要重新編譯整個程序,而如果采用反射機制的話,就可以不用卸載,只需要在運行時才動態(tài)的創(chuàng)建和編譯,就可以實現(xiàn)更新的功能。
缺點:
性能影響。使用反射基本上是一種解釋操作,我們可以告訴JVM,我們希望做什么并且它滿足我們的要求。這類操作總是慢于只直接執(zhí)行相同的操作。
破壞封裝,因為通過反射可以訪問私有變量或方法,這樣可能會存在安全性的問題。比如我們知道String是不可變的,因為這個類被final修飾說明不可繼承,并且String其實就是被final修飾的一個字符數(shù)組value,value是private的,但是通過反射是可以訪問到private成員變量,因此通過反射,我們其實是可以改變String的,很明顯,這樣是不安全的。
以上就是北大青鳥長沙麓谷校區(qū)java培訓(xùn)機構(gòu)的小編針對“Java基礎(chǔ)學(xué)習:Java反射機制”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。