基本概念
- 通常情況下編寫代碼都是固定的苔严,無論運(yùn)行多少次執(zhí)行的結(jié)果也是固定的篡悟,在某些特殊場合中編寫 代碼時(shí)不確定要創(chuàng)建什么類型的對象修噪,也不確定要調(diào)用什么樣的方法娘侍,這些都希望通過運(yùn)行時(shí)傳遞 的參數(shù)來決定奕巍,該機(jī)制叫做動態(tài)編程技術(shù)呵燕,也就是反射機(jī)制。
- 通俗來說貌夕,反射機(jī)制就是用于動態(tài)創(chuàng)建對象并且動態(tài)調(diào)用方法的機(jī)制律歼。
- 目前主流的框架底層都是采用反射機(jī)制實(shí)現(xiàn)的。
- 如: Person p = new Person(); - 表示聲明Person類型的引用指向Person類型的對象 p.show(); - 表示調(diào)用Person類中的成員方法show
Class類
基本概念
- java.lang.Class類的實(shí)例可以用于描述Java應(yīng)用程序中的類和接口啡专,也就是一種數(shù)據(jù)類型险毁。
- 該類沒有公共構(gòu)造方法,該類的實(shí)例由Java虛擬機(jī)和類加載器自動構(gòu)造完成们童,本質(zhì)上就是加載到內(nèi) 存中的運(yùn)行時(shí)類畔况。
獲取Class對象的方式
- 使用數(shù)據(jù)類型.class的方式可以獲取對應(yīng)類型的Class對象(掌握)。
- 使用引用/對象.getClass()的方式可以獲取對應(yīng)類型的Class對象慧库。
- 使用包裝類.TYPE的方式可以獲取對應(yīng)基本數(shù)據(jù)類型的Class對象跷跪。
- 使用Class.forName()的方式來獲取參數(shù)指定類型的Class對象(掌握)。
- 使用類加載器ClassLoader的方式獲取指定類型的Class對象齐板。
常用的方法(掌握)
方法聲明 |
功能介紹 |
static Class forName(String className) |
用于獲取參數(shù)指定類型對應(yīng)的Class對象并返回 |
T newInstance() |
用于創(chuàng)建該Class對象所表示類的新實(shí)例 |
Constructor類
基本概念
java.lang.reflect.Constructor類主要用于描述獲取到的構(gòu)造方法信息
Class類的常用方法
方法聲明 |
功能介紹 |
Constructor getConstructor(Class... parameterTypes) |
用于獲取此Class對象所表示類型中參數(shù)指定的公共構(gòu)造方法
|
Constructor[] getConstructors() |
用于獲取此Class對象所表示類型中所有的公共構(gòu)造方法 |
Constructor類的常用方法
方法聲明 |
功能介紹 |
T newInstance(Object... initargs) |
使用此Constructor對象描述的構(gòu)造方法來構(gòu)造Class對象代表類 型的新實(shí)例 |
int getModifiers() |
獲取方法的訪問修飾符 |
String getName() |
獲取方法的名稱 |
Class[] getParameterTypes() |
獲取方法所有參數(shù)的類型 |
Field類
基本概念
java.lang.reflect.Field類主要用于描述獲取到的單個(gè)成員變量信息吵瞻。
Class類的常用方法
方法聲明 |
功能介紹 |
Field getDeclaredField(String name) |
用于獲取此Class對象所表示類中參數(shù)指定的單個(gè)成員變量信息,不能訪問私有的變量甘磨,訪問私有變量需要setAccessible(true) |
Field[] getDeclaredFields() |
用于獲取此Class對象所表示類中所有成員變量信息 |
Field類的常用方法
方法聲明 |
功能介紹 |
Object get(Object obj) |
獲取參數(shù)對象obj中此Field對象所表示成員變量的數(shù)值 |
void set(Object obj, Object value) |
將參數(shù)對象obj中此Field對象表示成員變量的數(shù)值修改為參數(shù) value的數(shù)值 |
void setAccessible(boolean flag) |
當(dāng)實(shí)參傳遞true時(shí)橡羞,則反射對象在使用時(shí)應(yīng)該取消 Java 語言訪問檢查 |
int getModifiers() |
獲取成員變量的訪問修飾符 |
Class getType() |
獲取成員變量的數(shù)據(jù)類型 |
String getName() |
獲取成員變量的名稱 |
Method類
基本概念
java.lang.reflect.Method類主要用于描述獲取到的單個(gè)成員方法信息。
Class類的常用方法
方法聲明 |
功能介紹 |
Method getMethod(String name, Class... parameterTypes) |
用于獲取該Class對象表示類中名字為name參數(shù)為 parameterTypes的指定公共成員方法 |
Method[] getMethods() |
用于獲取該Class對象表示類中所有公共成員方法 |
Method類的常用方法
方法聲明 |
功能介紹 |
Object invoke(Object obj, Object... args) |
使用對象obj來調(diào)用此Method對象所表示的成員方法济舆,實(shí) 參傳遞args |
int getModifiers() |
獲取方法的訪問修飾符 |
Class getReturnType() |
獲取方法的返回值類型 |
String getName() |
獲取方法的名稱 |
Class[] getParameterTypes() |
獲取方法所有參數(shù)的類型 |
Class[] getExceptionTypes() |
獲取方法的異常信息 |
獲取其它結(jié)構(gòu)信息
方法聲明 |
功能介紹 |
Package getPackage() |
獲取所在的包信息 |
Class getSuperclass() |
獲取繼承的父類信息 |
Class[] getInterfaces() |
獲取實(shí)現(xiàn)的所有接口 |
Annotation[] getAnnotations() |
獲取注解信息 |
Type[] getGenericInterfaces() |
獲取泛型信息 |