java 反射
反射是一种机制,提供java 程序在RunTime获取类的元属性信息,创建对象,执行方法,修改权限等操作的能力,官方叫类的自省能力。(自己看看自己都有哪些部分、定义)
- 示例1
public class ReflectService {
public void sayHello(String name) {
System.out.println("hell0 " + name);
}
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
//获取对象
Object reflectService = Class.forName(ReflectService.class.getName()).newInstance();
// 获取方法
Method sayHello = reflectService.getClass().getMethod("sayHello", String.class);
//执行
sayHello.invoke(reflectService,"reflect");
}
}
- 获取class的三种方式
//1. 根据名字
Class<?> aClass = Class.forName(ReflectService.class.getName());
// 2. 直接调用class
Class<ReflectService> reflectServiceClass = ReflectService.class;
// 3. 通过对象
ReflectService reflectService1 = new ReflectService();
反射的使用场景
- 利用反射获取注解,根据注解来执行特殊业务操作,spring的BeanInit
- 通过isInstance方法可以解决泛型参数,优化代码
(实际中用的不多,效率方面肯定没有正常代码好)