更新時間:2019-09-26 09:55:58 來源:動力節點 瀏覽2396次
Java反射說的是在運行狀態中,對于任何一個類,我們都能夠知道這個類有哪些方法和屬性。很多動力節點的學員在面試中都會被問到Java反射機制這個問題,為了幫助大家更好的掌握這個知識點,動力節點Java培訓小編整理了一些資料分享給大家。
一、反射概念
在正式講解反射之前,為了很好的去理解它我們先從一個案例說起。請看下面的代碼:
這是一個最簡單不過的類,當我們使用的時候直接new出來一個User對象即可。因為這個類是我們自己定義的,所以在使用的時候我們知道User有兩個字段name和age,還有無參和有參構造方法,另外的test方法我們也可以直接調用(因為其是public)。
現在出現一個問題,如果這個user類不是我們自己定義的,我們從外部看不到里面有什么東西,而且我們又想去知道內部長什么樣,比如說有幾個字段、方法、構造方法、共有還是私有的等等,這時候該怎么辦呢?這時候java語言在設計的時候為我們提供了一個機制,就是反射機制,他能夠很方便的去解決我們的問題。
二、深入分析java反射機制
1、獲取Class類
在java中萬事萬物皆對象,Useruser=newUser()一行代碼我們知道了user是User類的實例對象,通過Studentstu=newStudent()我們知道了stu是Student的實例對象,但是我們想過沒,User和Student又是誰的對象呢?沒錯就是Class類的實例對象。那這個Class類是什么東西,內部長什么樣子呢?這時候我們很自然的聯想到使用反射機制。使用反射機制就可以獲取到這個class。
這里有三種方式可以獲取這個Class,我們來看一下代碼:
上面的c1、c2、c3都是Class類的實例,表示的都是User類。
當然,不僅僅是User這些類,對于基本數據類型甚至是包括void我們也可以使用這個方法。
現在就可以直接創建User類的實例了。
Useruser=(User)c1.getInstance();
現在我們對反射機制中獲取Class類的方法進行一個總計
2、獲取類的方法
現在通過反射看一下User類內部的樣子,打印一下(把這個操作封裝在了一個方法中):
下面我們把我們的User類傳進去,打印一下。
我們總結一下反射方法。
3、獲取類的屬性
(1)獲取所有屬性
上面有兩種獲取屬性的方法。重點是for循環。我們來測試一下
直接就會輸出我們的字段類型和名稱。
(2)獲取指定屬性
在這里我們的User類中name、age字段增加getter和setter方法
然后我們測試一下
在這里,我們在printFieldMsgBySelf方法中通過反射重新設置了age年齡的值,輸出之后已成功更改。
4、獲取類的構造方法
然后我們同樣的測試一下
跟我們之前的構造方法一樣。
5、獲取User類的父類和接口
我們在這里定義一個Human類(里面什么也沒有),然后定義一個UserInterface接口,讓User繼承它就好了。
然后我們在Test中去測試一下就可以了,測試方法很簡單,我們只需要調用這個方法就可以。
在上面的案例中,我們使用反射機制能夠獲取類的方法、字段、構造方法、父類和接口,當然也可以獲取一些其他的信息。不知道你是否掌握了Java反射機制這一知識點,想了解更多Java行業動態和學習資料,可以關注“動力節點IT培訓”官網Java資訊。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習