一、為什么要學(xué)反射?反射是什么?反射的使用場景?
當(dāng)編寫工具類需要傳入一個未知類型對象時,操作不了該對象。不過可以獲取該對象的字節(jié)碼對象,通過字節(jié)碼對象可以操作該對象,而通過字節(jié)碼對象操作對象的過程就是反射
反射:通過類的字節(jié)碼對象操作類的對象過程
-
使用場景
- 需要操作未知類型的對象時需要用到反射
二、說說使用反射的基本過程
獲取類的字節(jié)碼對象
通過字節(jié)碼對象獲取類的構(gòu)造方法
通過類的構(gòu)造方法創(chuàng)建類的對象
通過反射的相關(guān)方法操作該對象
三、獲取字節(jié)碼對象的方式有哪些?
對象.getClass();
數(shù)據(jù)類型.class;
Class.forName(類的全限定名);該方式最常用
四、反射的常用方法有哪些?
-
獲取類的構(gòu)造方法
- 公共無參構(gòu)造器:getConstructor();
- 公共有參構(gòu)造器:getConstructor(參數(shù)類型);
- 所有公共構(gòu)造器:getConstructors();
- 公共/私有無參構(gòu)造器:getDeclaredConstructor();
- 公共/私有有參構(gòu)造器:getDeclaredConstructor(參數(shù)類型);
- 所有構(gòu)造器(公共、私有、無參、有參):getDeclaredConstructors();
-
獲取類的方法
- 公共無參成員方法:getMethod(方法名);
- 公共有參成員方法:getMethod(方法名,參數(shù)類型);
- 所有公共成員方法(子類、父類):getMethods();
- 公共/私有無參成員方法:getDeclaredMethod(方法名);
- 公共/私有有參成員方法:getDeclaredMethod(方法名,參數(shù)類型);
- 所有成員方法(不包含父類成員方法):getDeclaredMethods();
-
獲取類的字段
- 公共字段:getField(字段名);
- 所有公共字段:getFields();
- 公共/私有字段:getDeclaredField(字段名);
- 所有字段(公共、私有):getDeclaredFields();