1. 程式人生 > 其它 >Java基礎回顧:反射Reflect

Java基礎回顧:反射Reflect

1)基本思想 反射可以在程式執行過程中動態獲取類資訊和呼叫類方法 通過反射構造類例項 通過反射呼叫方法
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); 
}
正射:new一個物件,這種方式是在編譯期就把物件的型別給定下來,執行過程中無法修改,需要修改原始碼重新編譯。 反射:可以在執行時確定使用哪一個資料類,在切換類時,無需修改原始碼、編譯程式。 2)基本使用 Java反射的主要組成部分有四個核心類(java.lang.reflect 包):
  • Class:任何執行在記憶體中的所有類都是該Class類的例項物件,每個Class類物件內部都包含了本來的所有資訊。
  • Field:描述一個類的屬性,內部包含了該屬性的所有資訊,例如資料型別,屬性名,訪問修飾符……
  • Constructor:描述一個類的構造方法,內部包含了構造方法的所有資訊,例如引數型別,引數名稱,引數訪問修飾符……
  • Method:描述一個類的所有方法,包括抽象方法,內部包含了該方法的所有資訊,與Constructor類似,不同之處是Method擁有返回值型別資訊,因為構造方法是沒有返回值的。
Class物件中包含了該類的所有資訊 3) 應用場景
  • Spring例項化物件:當程式啟動時,Spring會讀取配置檔案 applicationContext.xml 並解析出裡面所有的標籤例項化到 IOC 容器中。
  • 反射 + 工廠模式:通過反射消除工廠中的多個分支,如果需要生產新的類,無需關注工廠類,工廠類可以應對格之格新增的類,反射可以使得程式更加健壯。
  • JDBC連線資料庫:使用JDBC連線資料庫時,指定連線資料庫的驅動類時用到反射載入驅動類。
4)反射優缺點 優點:
  • 增加程式的靈活性
缺點:
  • 破壞類的封裝性:可以強制訪問private修飾的資訊
  • 效能損耗

參考:https://juejin.cn/post/6864324335654404104

一點浩然氣,千里快哉風!