Java学习_23_反射与动态代理


前言

博客仅记录个人学习进度和一些查缺补漏。
学习内容:BV17F411T7Ao


反射

是一种概念,允许编程时在构建对象前,就可以获取对应类内部的成员变量、成员方法和构造方法的一些信息。


先获取,再解剖,注意是从class对象中来获取的
在这里插入图片描述

获取class对象

在代码不同阶段有不同的获取class的方式
在这里插入图片描述

Class.forName(“全类名”)

为获取并使用class时,最为常用
在这里插入图片描述
在这里插入图片描述

类名.class

当作参数时最常使用
在这里插入图片描述

对象.getClass()

当已经有了一个类的对象时才会使用
在这里插入图片描述

通过class查看构造方法

在这里插入图片描述
例如:获取所有公开的构造方法
在这里插入图片描述
在这里插入图片描述
很明显,两个public类型的构造方法已经被给出
在这里插入图片描述
例如:获取包括私有的构造方法
在这里插入图片描述
在这里插入图片描述
例如:获取单个的构造方法(空参)
在这里插入图片描述
在这里插入图片描述
例如:获取单个的构造方法(指定参数个数和类型)
在这里插入图片描述
在这里插入图片描述
例如:获取单个的构造方法(多个参数)
在这里插入图片描述

例如:可以通过这些方法看到构造方法的权限修饰符
在这里插入图片描述
在这里插入图片描述
例如:获取每个参数
在这里插入图片描述
例如:临时取消权限并构造对象(暴力反射)
在这里插入图片描述

通过反射查看成员变量

在这里插入图片描述
例如:获取所有公开的成员变量
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
例如:获取所有(包括私有)的成员变量
在这里插入图片描述
在这里插入图片描述
例如:获取单个公开成员变量
在这里插入图片描述在这里插入图片描述
例如:获取单个私有成员变量
在这里插入图片描述
在这里插入图片描述

例如:获取到成员变量以后,就可以获取它的各种属性,如修饰符、变量名、数据类型
在这里插入图片描述
在这里插入图片描述

例如:获取对应成员变量记录的值(需要先创建一个对象)暴力反射
在这里插入图片描述
在这里插入图片描述
例如:修改对应成员变量记录的值(需要一个对象)
在这里插入图片描述

通过反射获取成员方法

在这里插入图片描述
首先获取class对象
在这里插入图片描述

例如:获取所有公开的的方法对象(默认包括父类)
在这里插入图片描述
在这里插入图片描述
例如:获取所有方法对象(不包括父类)
在这里插入图片描述
在这里插入图片描述
例如:获取单个方法,需要指定参数

在这里插入图片描述

例如:获取该方法的修饰符
在这里插入图片描述
例如:获取该方法的名字
在这里插入图片描述
例如:获取方法的形参
在这里插入图片描述
在这里插入图片描述

例如:获取方法可能抛出的异常
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
例如:运行刚刚获取的方法对象(需要一个对象去调用,需要该方法的形参,注意可能有返回值)(暴力反射)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

动态代理

手动在类里添加代码——侵入式修改
在这里插入图片描述
不修改源代码,增加功能,就是动态代理
在这里插入图片描述
在这里插入图片描述
代理要知道自己需要完成什么样的方法,需要通过接口实现

例如:先创建中间接口
在这里插入图片描述
例如:再在已有类中实现对应接口
在这里插入图片描述
在这里插入图片描述

例如:创建代理对象(本质是给出一个有Star对象能力的代理对象)
在这里插入图片描述
分析:
在这里插入图片描述
在这里插入图片描述
至此可以开始写具体的代理方法了
在这里插入图片描述

例如:使用
在这里插入图片描述

总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值