反射允许对成员变量,成员方法和构造方法的信息进行编程访问
它从字节码文件中获取这些信息,因此使用反射必须先获取class对象

获取class对象的三种方式
1.Class.forName(”全类名“)
使用于源代码阶段,全类名即包名+类名(选中类名右键copy)
2.类名.class
适用于加载阶段,一般用于当作参数传递
3.对象.getClass()
适用于运行阶段,已经创建对象后
注意字节码文件是唯一的,因此上述三种方法获取的是同一个对象
利用反射获取构造方法
获取到构造方法后,可以通过方法获取构造方法的信息,如权限修饰符,参数类型等
getModifiers()获取权限修饰符,返回整数(2的次方数)表示修饰符类型
getParameterCount()获取参数数量
getParameterTypes()获取参数类型
getParameter()获取所有参数
newInstance()构造新的对象
setAccessible(true)临时取消权限校验
利用反射获取成员变量
获取到成员变量后,可以通过方法获取成员变量的信息,如权限修饰符,名字等
getModifiers()获取权限修饰符,返回整数(2的次方数)表示修饰符类型
getName()获取名字
getType()获取数据类型
get(对象)获取成员变量记录的值
setAccessible(true)临时取消权限校验
set()修改对象里面记录的值
利用反射获取成员方法
获取到成员方法后,可以通过方法获取成员方法的信息,如权限修饰符,名字等
getModiifiers()获取权限修饰符,返回整数(2的次方数)表示修饰符类型
getName()获取名字
getParameters()获取形参
getExceptionTypes()获取方法的抛出异常
//方法运行
Method类中用于创建对象的方法
Object invoke(Object obj, object. . . args):运行方法
参数一:用obj对象调用该方法(方法的调用者对象)
参数二:调用方法的传递的参数(如果没有就不写)
返回值:方法的返回值(如果没有就不写)
反射的作用
1.获取一个类里面所有的信息,获取到了后执行其他业务逻辑
2.结合配置文件,动态创建对象并调用方法(只需要修改配置文件就可以不需要更改代码在别的类中实现相同的作用)
总结
