更新時間:2020-03-30 16:20:03 來源:動力節點 瀏覽2283次
一、什么是反射?
對于程序員來說,應該很少需要直接使用反射工具;之所以在語言中提供它們,是為了支持其他Java特性,比如對象序列化、JavaBeans以及RMI。還有就是在很多框架中,也是應用到了反射機制。
在初學時,只知道這是個生成驅動實例的語句,而這其實就是應用了反射
二、反射能做什么?
主要的四個功能:
-獲取對象所屬的類
-獲取類的成員變量、方法
-運行時創建對象
-運行時調用對象的方法
其它功能
可用構建器創建新對象,通過Constructor類取得其它類的構造函數
用get()和set()方法讀取和修改與Field對象關聯的字段
用invoke()方法調用與Method對象關聯的方法,即調用其他類的方法
此外,我們可調用方法getFields(),getMethods(),getConstructors(),分別返回用于表示字段、方法以及構建器的對象數組,取得并修改數組的信息
取得其他類的父類、實現的接口、權限修飾符、屬性類型等
三、反射的優缺點
優點:可以實現運行時動態創建對象,增加程序的靈活性。這種靈活性怎么體現的呢?比如我們在開發一個大型的軟件,編譯發布后,我們很可能需要更新一些功能,但因為軟件已發布,我們肯定不能要求用戶把以前的卸載,再重新安裝新的版本。如果我們采用靜態的解決方法的話,需要重新編譯整個程序,而如果采用反射機制的話,就可以不用卸載,只需要在運行時才動態的創建和編譯,就可以實現更新的功能。
缺點:
性能影響。使用反射基本上是一種解釋操作,我們可以告訴JVM,我們希望做什么并且它滿足我們的要求。這類操作總是慢于只直接執行相同的操作。
破壞封裝,因為通過反射可以訪問私有變量或方法,這樣可能會存在安全性的問題。比如我們知道String是不可變的,因為這個類被final修飾說明不可繼承,并且String其實就是被final修飾的一個字符數組value,value是private的,但是通過反射是可以訪問到private成員變量,因此通過反射,我們其實是可以改變String的,很明顯,這樣是不安全的。
以上就是動力節點java培訓機構的小編針對“Java基礎學習:Java反射機制”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習