1.反射机制的概念
反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息。
2.反射的作用
- 根据.class文件反编译
- 通过反射调用类的私有变量,方法,构造函数
- 动态创建对象和编译
3.反射常用类和方法
反射主要涉及的类:
java.lang.Class;
java.lang.reflect.Constructor;
java.lang.reflect.Field;
java.lang.reflect.Method;
java.lang.reflect.Modifier;
反射过程中常用的方法:
Class c=Class.forName("className"); //根据类名实例化类对象
Object obj=c.newInstance(); //创建对象的实例
Class<?> c = obj.getClass(); //根据对象获得类对象
Field getDeclaredField(String name); //根据字段名获取的成员变量
Field[] getDeclaredFields(); //获取所有成员变量
getField(String name) //根据字段名获取的成员变量
Field[] getFields() //获取所有成员变量
getDeclaredMethod(String name, Class<?>... parameterTypes) //根据方法名和参数获取成员方法
Method[] getDeclaredMethods(); //获取所有成员方法
getMethod(String name, Class<?>... parameterTypes); //根据方法名和参数获取成员方法
Method[] getMethods(); //获取所有成员方法
newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler invocationHandler); //动态代理方式生成接口对象
invoke(Object receiver, Object... args); //普通方法调用的反射实现,
//[方法.invoke(对象,参数)] == [对象.方法(参数)]
其中,Declared修饰的方法获取的是类自身声明的所有成员,包含public、protected和private成员。
非Declared修饰获取的方法获取的是类的所有public成员,这就包括自身的所有public成员,和从基类继承的、从接口实现的所有public成员。
4.反射常用实例
1.反射机制获取类对象
Class c1 = Class.forName("Test");
Class c2 = Test.class;
Test test = new Test();
Class c3 = test.getClass();
2.反射机制动态代理生成对象