一贝奇、概述
- 反射的源頭: 一個(gè)類型的class對(duì)象
- 反射就是把一個(gè)類中的各種成分映射成一種對(duì)象芝此。簡(jiǎn)單的說(shuō)就是把類看成一個(gè)類類型的對(duì)象。
- 反射發(fā)生在程序運(yùn)行期間的行為寿酌。
二胰苏、作用與功能
1、在運(yùn)行時(shí)判斷任意一個(gè)對(duì)象所屬的類醇疼;
2硕并、在運(yùn)行時(shí)構(gòu)造任意一個(gè)類的對(duì)象;
3秧荆、在運(yùn)行時(shí)判斷任意一個(gè)類所具有的成員變量和方法倔毙;
4、在運(yùn)行時(shí)調(diào)用任意一個(gè)對(duì)象的方法乙濒;
5陕赃、生成動(dòng)態(tài)代理卵蛉。
三、獲取方式
1么库、對(duì)象.getClass()
2傻丝、類名.class();
3、Class.forName包名+類名)
四诉儒、操作方式(方法)
1葡缰、操作構(gòu)造器
(1) 獲取構(gòu)造器
只能獲取公共的構(gòu)造器
Constructor<T> getConstructor(Class<?>... parameterTypes)
Constructor<?>[] getConstructors()
獲取所有修飾符修飾的構(gòu)造器
Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
Constructor<?>[] getDeclaredConstructors()
(2)使用構(gòu)造器創(chuàng)建對(duì)象
- 直接通過(guò)Class類中的newInstance() 方法創(chuàng)建調(diào)用,默認(rèn)調(diào)用空構(gòu)造
- 通過(guò)Constructor的newInstance() 創(chuàng)建對(duì)象,執(zhí)行使用當(dāng)前構(gòu)造器對(duì)對(duì)象初始化信息
2、操作方法
- 獲取方法
- 操作方法 Object invoke(Object obj, Object... args) 執(zhí)行這個(gè)方法 第一個(gè)參數(shù)匹配調(diào)用方法的對(duì)象,如果是靜態(tài)方法設(shè)置為null 第二個(gè)參數(shù):實(shí)參
3忱反、 操作屬性
- 獲取屬性 getFields()...
- 操作屬性方法: void set(Object obj, Object value) 為某一個(gè)屬性設(shè)置值 第一個(gè)參數(shù)對(duì)象這個(gè)成員變量的對(duì)象 第二個(gè)參數(shù):屬性的值
- get(Object obj) 獲取某一個(gè)對(duì)象的當(dāng)前屬性值