反射的定义
能够动态分析类结构的程序,称之反射。
Class数据类型
想要动态分析类结构,首先要知道这是哪个类,Java运行时为每个对象维护了一个运行时标识,这个标识就纪录了对象的类消息,这个类标识的类型就是Class。
现在知道了运行时标识的类型,那么如何获得其对象呢?
- 调用你想分析的类对象的getclass方法,它会返回Class对象
- 调用Class的静态方法forName,传入你想分析的类名,它会返回Class对象
- 直接在你想要分析的类名后加.class,它也会返回Class对象
举例,下面分析的是String类
String classname = in.nextLine();
Class inputclass = classname.getClass();
利用反射分析类结构
分析类结构就是分析实例字段,构造器,方法,Java有各自对应的类
三个类分别:
- Field:Field类描述被分析类的实例字段
- Method:Method类描述被分析类的类方法
- Constructor:Constructor类描述被分析类的构造器
实例字段组成:
[修饰符] 数据类型 字段名
构造器组成:
修饰符 构造器名
方法组成:
[修饰符] 返回值类型 方法名 参数
field,constructor,method三个类有方法获得自己的组成部分
举例
//classname是Class类对象
Field field = classname.getDeclaredFields();
String name = field.getName(); //这就获得了field的字段名
扩展资料
Class类的常见方法:
- getField:返回包含实例字段的Field类对象
- getMethod:返回包含方法的Method类对象
- getConstructor:返回包含构造器的Constructor类对象
Field/Method/Constructor都有一个方法:
- getName:返回字段/方法/构造器的名字
Method/Constructor都有一个方法:
- getParameterTypes:返回方法/构造器的参数类的Class类对象
Method有一个方法,可以获得返回值类型的Class对象
- getReturnType()