我開始學習反射的初衷是為了理解Spring 里的控制反轉,其次可以利用反射來達到類中的解耦。 自己寫的一些心得,希望能幫到大家 1.反射指的是對象的反向處理操作,是根據對象來取得對象的來源信息。 反射的核心是:將類編譯的位元組碼映射成對應的Java類型 首先要理解,任何一個類的對象都可以通過Objec ...
我開始學習反射的初衷是為了理解Spring 里的控制反轉,其次可以利用反射來達到類中的解耦。 自己寫的一些心得,希望能幫到大家
1.反射指的是對象的反向處理操作,是根據對象來取得對象的來源信息。
反射的核心是:將類編譯的位元組碼映射成對應的Java類型
首先要理解,任何一個類的對象都可以通過Object類中的getClass()方法取得Class類對象
那麼如何獲取位元組碼呢?
- 第一 使用 Class.forName();
該方法返回的是一個Class 對象,這個方法大家是否熟悉呢? 對的在你鏈接資料庫的時候載入Jdbc驅動的時候曾經用到過
說好聽點叫做獲取jdbc 驅動,難聽點叫做載入位元組碼。
- 第二種: 使用已經現有的類.Class 方法
- 第三種則使用繼承Object 類中的getClass 方法 此方法需要有一個現有的對象
我們可以利用反射做一些什麼呢?
第一:獲取package
第二:獲取屬性欄位
獲取多個數據欄位與獲取單個數據欄位,這裡做一個拓展。如何訪問並且修改已經設置為私有的屬性呢?
User類
我們可以看到其中的name屬性是私有的
Test類
第三:獲取構造器()通過構造器創建對象
通過構造器調用newinstance方法創建對象,註意此方法是可選列表,即可創建帶參數或者不帶參數的對象,
獲取構造器的時候,傳入構造器的參數為包裝類型
第四:獲取並且調用方法
User類
Test類
這是我這一段時間內學習反射的心得,在此也有一些話想要送給大家,知識是一個不斷積累的過程,學習也如逆水行舟,可能在某一階段,你並不明白你為什麼要這麼做,或者這麼做的意義究竟是什麼? 但是不要不做,慢慢的去積累下來。總有一天,良好的代碼習慣以及重足的代碼量,一定會在某一個項目,某一個Demo中 體現出來,上面是我寫的內容,如果有不足 歡迎大牛指正。 加入群 大家可以一起交流 Q群:682677231