1.什麼是反射? Java中的反射機制是Java語言的一個很重要的特性,是Java “動態性” 的重要體現。Java反射機制讓我們在程式運行狀態中,對於任意一個類,都能知道這個類的所有屬性和方法;對於任意一個對象,都能調用他的任意一個方法。這種動態獲取屬性以及動態調用對象方法的功能就是“Java的反 ...
1.什麼是反射?
Java中的反射機制是Java語言的一個很重要的特性,是Java “動態性” 的重要體現。
Java反射機制讓我們在程式運行狀態中,對於任意一個類,都能知道這個類的所有屬性和方法;對於任意一個對象,都能調用他的任意一個方法。這種動態獲取屬性以及動態調用對象方法的功能就是“Java的反射機制”。
2.反射機制的本質(A)
在使用一個類之前必須先載入它,而當虛擬機載入完一個類後,就會在方法區創建一個這個類對應的class對象(一個類只有一個class對象),這個對象包含了類完整的結構信息。這個對象就像一面鏡子,通過他可以“看到”整個類的結構,因此很形象的被稱為“反射”。“class對象”就是反射機制的核心。
3.java.lang.Class 類(A)
Class類實現反射(Reflection)的基礎,任何想實現動態載入、運行的類都必須先獲得其相應的Class對象。
java.lang.Calss類十分特殊,它表示java中的所有類型(類、介面、枚舉、註解、數組、原始數據類型(基本數據類型)以及void)
Class類沒有公共的構造器,Class對象由虛擬機自行創建。
4.Class對象獲取方式:
1.運用 Class.froName(包名+類名); (常用)
2.運用 .class 語法
3.運用 getClass()方法
5.反射機制的常見操作
1.動態載入類,動態獲取類的信息(屬性、方法、構造器等)
2.動態構造對象
3.動態調用類和對象的方法
4.動態調用及處理屬性
5.獲取泛型信息
6.處理註解
6.常見操作涉及到的類
Class類 代表類的結構信息
Method類 代表方法的結構信息
Field類 代表屬性的結構信息
Construction類 代表構造器的結構信息
Annotation類 代表註解的結構信息
7.Class類常用方法
1.getClassLoader() 返回類的類載入器。
2.getName() 返回class對象表示的實體的名稱(包含包名)
3.getSimpleName() 返回class對象表示的實體的簡單名稱(不含包名)
4.newInstance() 創建此class對象表示的類的新對象。
獲取屬性(欄位):
1.getField(String name) 返回一個 Field對象,反射class對象表示的類或介面的指定公共欄位。
2.getFields() 返回一個Field數組對象,反射class對象表示的類或介面的所有可訪問的公共欄位 。
3.getDeclaredField(String name) 返回一個 Field對象,它反射此class對象表示的類或介面中指定的聲明欄位。
4.getDeclaredFields() 返回一個Field數組對象反射此class對象表示的類或介面中聲明的所有欄位。
獲取方法:
1.getMethod(String name, 類<?>... 參數(列表)類型)
返回一個 Method對象,它反射此表示的類或介面的指定公共方法。
2.getMethods() 返回一個Method對象數組 反射class對象表示的類或介面中所有公共方法,包括那些由類或介面和那些從父類和父介面繼承的方法。
3.getDeclaredMethod(String name, 類<?>... 參數(列表)類型)
返回一個 Method對象,它反射此表示的類或介面中聲明的指定方法。
4.getDeclaredMethods()
返回一個Method對象數組 反射class對象表示的類或介面中聲明的所有方法,包括公共,受保護,預設(包)訪問和私有方法,但不包括繼承的方法。
8.Field類常用方法
1.getName() 返回此 Field對象表示的欄位的名稱。
2.getType() 返回此 Field對象表示的欄位的類型(class)
3.get(Object obj) 返回此Field對象所表示的欄位的值 。
4.set(Object obj, Object value)
將指定對象參數上的此 Field對象表示的欄位設置為指定的新值。
set方法無法直接訪問private屬性,需要“禁用安全檢查”,即setAcceessible(true)。
5.getModifiers() 以整數形式(int)返回由該 Field對象表示的欄位的Java語言修飾符
9.Method類常用方法
1.getName() 返回由此Method對象表示的方法的名稱
2.getReturnType() 返回一個class對象,表示Method對象表示的方法的返回值類型。
3.getParameterTypes()
返回一個class對象的數組, 以聲明順序表示Method對象表示的方法的形式參數類型。
4.getModifiers() 返回Method對象表示的方法的修飾符
5.invoke(Object obj, Object... args) args 參數列表
調用指定對象的Method對象表示的方法 args為實參