JAVASE反射机制
一、反射机制的原理以及提供的功能
1.与反射相关的几个API
2.反射机制的简单使用
通过所调用类的class来获取Class类(与class不一样)的对象。
用Class类创建的对象来创建想调用的类的对象(有些绕口- - )。
Field类用来接收成员变量,通过Class类对象的getField来调用。并且可以使用Field类对象的set方法对成员变量进行赋值(因为name属性是一个public权限的成员变量,所以可以直接通过set去改变),但age属性是一个private权限的成员变量,所以需要使用Field类对象的setAccessible(true)方法使其可以设置。
可以通过Class类对象的getMethod方法获取其他类中的成员方法,用Method类接收,(show方法为一个无参方法所以直接获取)。当碰到有参数的方法时,需要使用getMethod的一个重载方法进行获取,然后在进行invoke调用时输入参数即可。如下图
二、Class类深入理解
可以通过某个类对象的getClass方法返回此类给Class类的对象。
1.当有了Class类的实例之后:
1)创建对应的运行时类的对象
2)获取对应的运行时类的完整结构(属性、方法、构造器、内部类、父类、所在的包、异常、注解)
3)调用对应的运行时类的结构(属性、方法、构造器)
4)反射的应用--动态代理
2.总结以下获取Class类实例的四种方式
以上为常用的三种获取Class类的方式
还可以通过类的加载器来获取(了解)
3.通过Class来创建类的对象的条件
三、通过反射获取类的所有结构
1.获取运行时类的属性及其属性各部分的内容
2.获取运行时类的方法及其方法的个部分内容
3.获取运行时类的父类
4.获取运行时类实现的接口
5.获取运行时类所在的包
6.获取注解
四、通过反射调用指定的属性、方法、构造器
1调用运行时类的属性
2.调用运行时类的方法
3.调用运行时类的构造器
调用指定的构造器创建类的对象,如不指定,则默认调用类的空参构造器。
五、反射的应用--动态代理
1.首先了解静态代理模式
首先需要一个接口,让被代理类(实际执行的类)实现此接口,再创建一个实现此接口的代理类,在构造器的形参中传入一个被代理类的对象,通过代理类实现的方法来进行对被代理类方法的调用。
2.动态代理模式
通过反射机制使代理类可以代理任意一个实现此接口的类所创建的对象,进而调用其方法。