目录
一、什么是反射?
二、获取class对象的三种方式编辑
1、Class.forName("全类名");
2、类名.class
3、对象.getClass();
4、代码实现
三、反射获取
1、利用反射获取构造方法
①、示例代码:编辑
②、获取所有的构造方法:编辑
③、获取单个构造方法:
编辑④、获取方法权限修饰符:
编辑
编辑⑤、获取参数个数、获取参数类型、获取所有参数:
编辑
⑥、获取私有:(暴力反射)
2、利用发射获取成员变量编辑
①、获取class字节码文件的对象编辑
②、获取所有公共成员变量
编辑③、获取所有成员变量
编辑④、获取单个的成员变量
⑤、获取权限修饰符
编辑⑥、获取成员变量的名字
编辑⑦、获取成员变量的数据类型
编辑⑧、获取成员变量记录的值
编辑⑨、修改对象里面记录的值
编辑3、利用反射获取成员方法
①、获取class字节码文件对象
编辑②、获取里面所有的公共方法对象
③、获取里面所有的方法对象
编辑④、获取单个的方法
编辑⑤、获取方法的修饰符
编辑⑥、获取方法的名字
编辑⑦、获取方法的形参
编辑⑧、获取方法的抛出的异常
编辑⑨、方法运行
四、反射的作用编辑
1、练习1:保存信息编辑
2、练习2:跟配置文件结合动态创建编辑
3、小结getClass()是定义在Object类中的,因此所有的对象都可以调用它
五、动态代理
编辑1、什么是动态代理?动态代理可以无侵入式的给代码增加额外的功能
2、程序为什么需要代理?代理长什么样?
编辑①、示例代码BigStar.java(JavaBean)
3、小结
编辑4、如何为Java对象创建一个代理对象?
①、newProxyInstance(1,2,3)
编辑②、示例代码:(创建一个代理)ProxyUtil.java
③、小结
一、什么是反射?
反射允许对封装类的字段,方法和构造函数的信息进行编程访问
换句话说就是(从类里拿出来)
可以获取到:(利用反射,我们可以获取到类中所有的东西)
获取是先从class字节码文件中获取的
二、获取class对象的三种方式
三种方式也对应了三种阶段
1、Class.forName("全类名");
全类名 = 包名+类名
2、类名.class
3、对象.getClass();
4、代码实现
三种方式获取到的字节码文件对象其实是一样的
三、反射获取
1、利用反射获取构造方法
①、示例代码:
②、获取所有的构造方法:
③、获取单个构造方法:

④、获取方法权限修饰符:

⑤、获取参数个数、获取参数类型、获取所有参数:
⑥、获取私有:(暴力反射)
2、利用发射获取成员变量
①、获取class字节码文件的对象
②、获取所有公共成员变量

③、获取所有成员变量

④、获取单个的成员变量
⑤、获取权限修饰符

⑥、获取成员变量的名字

⑦、获取成员变量的数据类型

⑧、获取成员变量记录的值

⑨、修改对象里面记录的值

3、利用反射获取成员方法
①、获取class字节码文件对象

②、获取里面所有的公共方法对象
包含父类中所有的公共方法
③、获取里面所有的方法对象

④、获取单个的方法

⑤、获取方法的修饰符

⑥、获取方法的名字

⑦、获取方法的形参

⑧、获取方法的抛出的异常

⑨、方法运行
四、反射的作用
1、练习1:保存信息
示例代码:
完整代码:(创建IO流存入本地文件)
2、练习2:跟配置文件结合动态创建
示例代码:
(配置文件 prop.properties)
反射和配置文件结合,动态创建对象
老师:
3、小结
getClass()是定义在Object类中的,因此所有的对象都可以调用它
五、动态代理

1、什么是动态代理?
动态代理可以无侵入式的给代码增加额外的功能
2、程序为什么需要代理?代理长什么样?

①、示例代码
BigStar.java(JavaBean)
Star.java(接口)
3、小结

4、如何为Java对象创建一个代理对象?
①、newProxyInstance(1,2,3)

②、示例代码:(创建一个代理)
ProxyUtil.java
参数一:固定格式
参数二:指定数组,如果有多个接口,可以将多个接口都放入数组
参数三:匿名内部类
测试类:
JavaBean(BigStar)
③、小结
1Java提供了什么API帮我们创建代理?
newProxyInstance(1,2,3)
newIProxyInstance方法在创建代理时,需要接几个参数,每个参数的含义是什么?
三个参数,参数1:用于指定用哪个类加载器
参数3: 用来指定生成的代理
参数2: 指定接口:
对象要干什么事情
通过invokehandler的invoke方法指定代理干的事时,这个invoke会被谁调用? 要接哪几个参数?
bigstar, argsll