java反射技術總結

反射
1.1 基本概念

反射本質上就是一種動態編程的技術,可以在運行階段動態地創建對象以及動態地調用方法,具體由實參決定。
優點:
1)動態的創建對象
2)動態的調用對象
缺點:
1)可讀性差
2)編碼的難度高
目前主流的框架技術底層都是反射的機制,如:structs、spring、hibernate等

普通的創建對象特點:代碼簡單、創建的對象臺固定
如:

 Person p = new Person();   -  只能創建Person類型的對象。
 Student s = new Student(); -  只能創建Student類型的對象。    

    void show(){}
    void show(int i){}
    void show(double d){}
    ... ...

1.2 Class類

(1)基本概念
java.lang.Class類的實例代表應用程序的類和接口,通俗來說,就是該類的實例代表一種數據類型。
該類沒有公共的構造方法,該類的實例都是由java虛擬機和類加載器自動構造。
(2)Class對象的獲取方式
a.使用數據類型.class的方式可以獲取該類型的Class對象。
b.使用對象.getClass()的方式可以獲取該類型的Class對象。
c.使用包裝類的TYPE屬性獲取該包裝類對應基本數據類型的Class對象。
d.使用Class類的forName()方法獲取參數類型的Class對象。

(3)常用的方法


> static Class<?> forName(String className) 
> -獲取參數指定類型的Class對象。    
> 
> T newInstance()  - 根據Class對象創建新實例。
> Constructor<T> getConstructor(Class<?>... parameterTypes) 
> - 用於獲取當前Class對象對應類中指定的公共構造方法。  
> 
>Constructor<?>[] getConstructors()- 獲取對應類中所有的公共構造方法。
>
>Field getDeclaredField(String name) - 獲取對應類中指定的成員變量。    
>
>Field[] getDeclaredFields() - 獲取對應類中所有的成員變量。
> 
>Method getMethod(String name, Class<?>... parameterTypes) 
>       - 用於獲取對應類中指定的公共成員方法。    
>       
>Method[] getMethods() - 用於獲取對應類中所有的公共成員方法。

1.3 Constructor類

java.lang.reflect.Constructor類用於描述獲取到的構造方法。 T
newInstance(Object… initargs) - 調用當前描述的構造方法去創建新實例。

1.4 Field類

java.lang.reflect.Field類用於描述獲取到的成員變量。
Object get(Object obj) -用於獲取指定對象中此成員變量的數值。
void setAccessible(boolean flag) -參數爲true表示可以訪問私有成員。
void set(Object obj, Object value) - 用於修改指定對象中當前成員變量的數值。

1.5 Method類

java.lang.reflect.Method類用於描述獲取到的成員方法。
Object invoke(Object obj, Object… args) - 用於obj對象調用當前方法,並傳遞args作爲實參。

發佈了27 篇原創文章 · 獲贊 25 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章