Java 反射
反射
反射允許對封裝類的字段,方法和構造函數的所有信息進行編程訪問
獲取Class對象
Class.forName("全類名");適用于源代碼階段 全類名:包名+類名 這是最為常用的方式
類名.class 適用于加載階段 一般更多的是當作參數進行傳遞
對象.getClass(); 適用于運行階段 當我們已經有了這個類的對象時,才可以使用
獲取構造方法
Class類中用于獲取構造方法的方法
規(guī)則:
get表示獲取
Declared表示私有
最后的s表示所有,復數形式
如果當前獲取到的是私有的,必須要臨時修改訪問權限,否則無法使用
方法名 說明 Constructor<?>[] getConstructors() 返回所有公共構造方法對象的數組 Constructor<?>[] getDeclaredConstructors() 返回所有構造方法對象的數組 Constructor getConstructor(Class<?>… parameterTypes) 返回單個公共構造方法對象 Consturctor getDeclaredConstructor(Class<?>… parameterTypes) 返回單個構造方法對象
Constructor類中用于創(chuàng)建對象的方法

獲取成員變量
Class類中獲取成員變量的方法
規(guī)則:
get表示獲取
Declared表示私有
最后的s表示所有,復數形式
如果當前獲取到的是私有的,必須要臨時修改訪問權限,否則無法使用

可以獲取權限修飾符,成員變量名字,成員變量數據類型,成員變量記錄的值,修改變量記錄的值.代碼略
獲取成員方法

還可以獲取方法的形參,方法拋出的異常,獲取方法并運行(invoke方法)
反射的作用
獲取一個類所有的信息,獲取到了以后再執(zhí)行其他的業(yè)務邏輯
結合配置文件,動態(tài)地創(chuàng)建對象并掉用方法
例:把對象里面所有的成員變量名和值保存到本地文件中(我們并不需要提前知道對象有什么屬性)
例:與配置文件結合