標籤:src com tor 問題 注意 image pre field 構造
首先,看幾個問題
1. Class和class有什麼區別?
2. 擷取類的位元組碼(Class)的幾種方式
一個例子說明:
輸出結果:
3. 概念
本來不想講概念,因為網上有一大堆。而且,我覺得自己也講不出什麼新鮮花樣來,但為了便於總結理解,還是說一句:
反射簡單看來就是用一些特殊的類來表示普遍類中的一些成分(構造方法,成員屬性,成員方法)。為什嗎?因為一切
皆對象嘛~由此就引出了Constructor,Field,Method等等類的意義和用法了。
4. Constructor類
表示的就是類中的構造方法,一般來說像getConstructors(),getFields(),getMethods()這種的,一看就知道是複數,表示所有的。
Constructor的用法直接來個例子
這些基本都是固定格式,基本上靠背,輸出:
5. Field類
見名知意,Field表示的就是成員屬性了。做Field類的測試時,先建立個FieldTest類:
接來下直接看用法,繼續在ClassTest裡編寫以下代碼:
輸出:
注意:getField()和getDeclaredField的區別。因為成員屬性一個是私人,一個是公有。getField()無法正常發現私人
成員,不信可以試試。而對於getDeclaredField(),如果不設定後面的setAccessible(true),即使能知道有這個Field,但也
用不了。
6. 練習案例一
學到這裡,可以做一個簡單的綜合案例了:把某個類中所有String類型屬性的值中b都換成a.
輸出:
7. Method類
表示的就是成員方法了,直接看例子:
輸出:
可以看到用法也很簡單,相對直接。接下來,比如說如果想要執行某個類中的main方法,可以參考以下案例:
這裡不用第一種方式直接調用時因為,實際情況下我們MainMethodTest這個類可能不是確定的,而是通過參數傳入的:
輸出:
8.數組的反射
這裡先說幾個概念,數組也是一種類;類型一樣,維度一樣的數組屬於同一類:
輸出:
來個問題,怎麼使用反射輸出數組裡所有元素:
這樣?:
輸出:
發現String的沒問題,int類型數組還是不行,這個就涉及到裝包拆包的基礎問題了。沒辦法,自己寫個:
輸出:
這下行了,反射的基礎用法到這就差不多了。但是很多概念沒總結出來,時間問題沒辦法。只能先學用法,後面有空
再把概念理解總結下咯。
JAVA基礎之反射