Java基礎回顧:反射Reflect
阿新 • • 發佈:2021-10-16
1)基本思想
反射可以在程式執行過程中動態獲取類資訊和呼叫類方法
通過反射構造類例項
通過反射呼叫方法
正射:new一個物件,這種方式是在編譯期就把物件的型別給定下來,執行過程中無法修改,需要修改原始碼重新編譯。 反射:可以在執行時確定使用哪一個資料類,在切換類時,無需修改原始碼、編譯程式。 2)基本使用 Java反射的主要組成部分有四個核心類(java.lang.reflect 包):Class clazz = Class.forName("com.bean.SmallPineapple"); Constructor constructor = clazz.getConstructor(String.class, int.class); constructor.setAccessible(true); SmallPineapple sp = (SmallPineapple) constructor.newInstance("小菠蘿", 21); Method method = clazz.getMethod("getInfo"); if (method != null) { method.invoke(sp, null); }
- Class:任何執行在記憶體中的所有類都是該Class類的例項物件,每個Class類物件內部都包含了本來的所有資訊。
- Field:描述一個類的屬性,內部包含了該屬性的所有資訊,例如資料型別,屬性名,訪問修飾符……
- Constructor:描述一個類的構造方法,內部包含了構造方法的所有資訊,例如引數型別,引數名稱,引數訪問修飾符……
- Method:描述一個類的所有方法,包括抽象方法,內部包含了該方法的所有資訊,與Constructor類似,不同之處是Method擁有返回值型別資訊,因為構造方法是沒有返回值的。
- Spring例項化物件:當程式啟動時,Spring會讀取配置檔案 applicationContext.xml 並解析出裡面所有的標籤例項化到 IOC 容器中。
- 反射 + 工廠模式:通過反射消除工廠中的多個分支,如果需要生產新的類,無需關注工廠類,工廠類可以應對格之格新增的類,反射可以使得程式更加健壯。
- JDBC連線資料庫:使用JDBC連線資料庫時,指定連線資料庫的驅動類時用到反射載入驅動類。
- 增加程式的靈活性
- 破壞類的封裝性:可以強制訪問private修飾的資訊
- 效能損耗
參考:https://juejin.cn/post/6864324335654404104
一點浩然氣,千里快哉風!