版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Haidaiya/article/details/83016856
1 概述
反射获取的都是class对象,以下是在不同的阶段获取对象的方式。
2 源文件阶段class对象的作用
可以利用全类名创造对象,具体代码为:
3 class对象获取类中的字段(即成员变量)
注释:通过Class.forName()获取到了Person的字节码对象
getConstructor()方法返回构造方法,注意参数需要使用Class对象
通过得到的有参构造创建一个实例p
获取私有变量private name,暴力获取
将name这个字段设置为可以访问
将p对象中的name字段改为“李四”值。
4 class对象获取类中的方法
5 动态代理
上面反射的作用就是在于获得字节码文件,通过字节码文件获得这个字节码文件的属性啊,方法啊之类的,动态代理这个概念看似在目前学习阶段没有作用,但是在以后从事java EE开发中,那些框架什么的,还是有用处的,动态代理其实是一种加强,比如我有一个笔,这个笔买来就是黑色墨水,但是我现在想让它写红色墨水,又不能把笔拆了,所以我只能通过动态代理给这个笔再绑上一个红色笔芯。
这是我对动态代理的理解。下面用代码详细解释:
(0)动态代理只能用于接口,所以我会对这个接口进行代理
(1)黑色的钢笔接口
(2)黑色钢笔接口的实现类
(3)未代理之前
(4)代理第一步:创建实现InvocationHandler的类,并重写invok方法
(5)代理第二步:使用Proxy的newProxyInstance开始代理
(6)代理后结果
(7)总结
三句话:1 ,只能对接口代理
2,InvokationHandler接口
3,Proxy类