引言
- 最近的项目中,需要根据客户端传入的id来动态的实例化对象,所以学习了一下java的反射机制;
反射的定义
- 反射是指程序可以访问、检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义;
- import是在程序编译时,静态引入相应类,反射是程序运行时,根据某一字符串,访问、创建这个字符串描述的类或是它的方法;
反射的作用
- 在运行时判断任意一个对象所属的类 ;
- 在运行时构造任意一个类的对象 ;
- 在运行时判断任意一个类所具有的成员变量和方法 ;
- 在运行时调用任意一个对象的方法;
反射所需的API
都位于java.lang.reflect包中:
- Class类:代表一个类,位于java.lang包下;
- Field类:代表类的成员变量(成员变量也称为类的属性);
- Method类:代表类的方法;
- Constructor类:代表类的构造方法;
- Array类:提供了动态创建数组,以及访问数组的元素的静态方法;
反射实例
- 获取Class对象:
1 | package test12; |
- 获取所有成员变量:
1 | package test12; |
- 获取特定的成员变量:
1 | package test12; |
- 获取所有方法:
1 | package test12; |
- 获取特定的方法并调用之
1 | package test12; |
1 | //test类 |
- 动态生成对象(构造器不含参数)
1 | Class<?> classType = String.class; |
- 动态生成对象(构造器含参数):
1 | package test12; |
1 | //test类 |