一、为什么要学反射?反射是什么?反射的使用场景?
当编写工具类需要传入一个未知类型对象时,操作不了该对象。不过可以获取该对象的字节码对象,通过字节码对象可以操作该对象,而通过字节码对象操作对象的过程就是反射
反射:通过类的字节码对象操作类的对象过程
-
使用场景
- 需要操作未知类型的对象时需要用到反射
二、说说使用反射的基本过程
获取类的字节码对象
通过字节码对象获取类的构造方法
通过类的构造方法创建类的对象
通过反射的相关方法操作该对象
三、获取字节码对象的方式有哪些?
对象.getClass();
数据类型.class;
Class.forName(类的全限定名);该方式最常用
四、反射的常用方法有哪些?
-
获取类的构造方法
- 公共无参构造器:getConstructor();
- 公共有参构造器:getConstructor(参数类型);
- 所有公共构造器:getConstructors();
- 公共/私有无参构造器:getDeclaredConstructor();
- 公共/私有有参构造器:getDeclaredConstructor(参数类型);
- 所有构造器(公共、私有、无参、有参):getDeclaredConstructors();
-
获取类的方法
- 公共无参成员方法:getMethod(方法名);
- 公共有参成员方法:getMethod(方法名,参数类型);
- 所有公共成员方法(子类、父类):getMethods();
- 公共/私有无参成员方法:getDeclaredMethod(方法名);
- 公共/私有有参成员方法:getDeclaredMethod(方法名,参数类型);
- 所有成员方法(不包含父类成员方法):getDeclaredMethods();
-
获取类的字段
- 公共字段:getField(字段名);
- 所有公共字段:getFields();
- 公共/私有字段:getDeclaredField(字段名);
- 所有字段(公共、私有):getDeclaredFields();