反射代理
經過反射建立對象 :對象
例->Person p = (Person)class.forName(「com.shsxt.demo.Peoson」).newInstance()接口
反射是發生在程序運行期間的行爲;之後會大量運用到反射技術,使用代碼更靈活簡單內存
反射:get
- 建立對象這個類型的Class對象的一個鏡像|複製體
- 類加載到內存的時候,就在內存中存在的,不用咱們手動建立就已經存在,而且只一個類只有一個表示這個類的Class對象
- 你能拿到一個類型的Class對象,可以使用Class類中的這些成員方法操做這個類型
Class類的實例表示正在運行的Java應用程序中的類和接口it
Java 反射機制能夠實現的功能:class
- 在運行時判斷任意一個對象所屬的類
- 在運行時構造任意一個類的對象
- 在運行時判斷任意一個類具備的成員變量和方法
- 在運行時調用任意一個對象的方法
- 生成動態代理
獲取類的class對象,有如下三種方式:變量
- Class.forName(「包名.類名」)
- 類.class
- 對象.getClass()
經過反射反射
獲取一個類型的構造器:程序
- Constructor<T>getConstructor(Class<?>…parameterType) 返回一個Constructor對象,它反映此Class對象所表示的類的指定公共構造方法
- Constructor<?>[] getConstructor() 返回全部的公共的構造器
經過構造器建立對象
- Class類中newInstance() 建立對象-->空構造
- Constructor類的成員方法 T newInstance(Object…initargs),接受匹配構造器的實參建立一個對象
- Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes 返回一個 Constructor 對象,該對象反映此 Class 對象所表示的類或接口的指定構造方法。
- Constructor<?>[] getDeclaredConstructors() 獲取全部的構造器對象,包括私有的
操做方法
- Method getMethod(String name, Class<?>... parameterTypes) 返回一個 Method 對象,它反映此 Class 對象所表示的類或接口的指定公共成員方法。
- Method[] getMethods()
- Method getDeclaredMethod(String name, Class<?>... parameterTypes) 返回一個 Method 對象,該對象反映此 Class 對象所表示的類或接口的指定已聲明方法。
- Method[] getDeclaredMethods()
執行方法
Object invoke(Object obj, Object... args) 參數1:調用方法的對象 參數2:方法的實參 返回值:執行方法的返回值