一、反射的本质
java中每个.class文件都会在堆中创建一个Class对象,反射就是使用Class对象控制.class的类字节码。
二、获取Class对象的方法
1、Class clazz = 类名.class
2、Class clazz = Class.forName(“类的完整路径”)
3、实例对象的引用.getClass();//ps:这个方法是继承自object类中的
三、反射之创建对象
<!--[if !supportLists]-->1. <!--[endif]-->使用Class对象的newInstance方法,这个方法相当于调用空构造函数
四、反射之field
1. Class类的getDeclaredFields方法可以获得本类中的所有实例比变量。本方法返货的是一个field对象 或者该对象的数组。
<!--[if !supportLists]-->2. <!--[endif]-->可以使用field的set方法修改相关属性的值,但是对于private的属性要先关闭语法检查,使用field方法的setAccessible(true)。还有一点,set方法如果作用在静态变量上可以不用传递实例变量。
<!--[if !supportLists]-->3. <!--[endif]-->使用field的getField方法可以获得该类的所用public方法(注意这里面包含所有的父类public方法)
<!--[if !supportLists]-->五、<!--[endif]-->反射之方法
getDeclaredMethods可以获得所有的类的方法
getDeclaredMethod(string Class[])可以获得相应参数列表的方法,但是不能获得父类的方法,如果是private方法,要进行调用就要关闭语法检测,使用Method类的setAccessible方法。调用方法使用invoke方法
getMethod可以获得所有的公共方法,包括父类的
<!--[if !supportLists]-->六、<!--[endif]-->反射之构造方法
Class类的getConstructor(CLass[])可以获得类的构造函数
使用Constructor类的newInstance方法可以创建一个对象