Java的反射机制

反射概述Javabean
在这里插入图片描述
Bean的无参构造方法

在这里插入图片描述
获取class对象(三种)
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述获取实例对象
通过无参构造方法获得实例对象

在这里插入图片描述通过有参构造方法获得实例对象
在这里插入图片描述
无参快速获得实例方式
在这里插入图片描述获取private私有构造的实例
在这里插入图片描述public方法,使用clazz调用get,set方法。
在这里插入图片描述private方法,使用clazz调用私有方法。(了解)
暴力设置运行私有访问,使用来.getDclearMethod()获得方法,再调.setAccessilbe(true)来使强制JVM允许获取private的方法

在这里插入图片描述main方法的执行
不需要创建实例

在这里插入图片描述
因为main方法是static方法,不需要传实例对象
在这里插入图片描述字段
在这里插入图片描述properties类
properties时Map的一个子类,它的基础使用的方法和Map很像
传输数据

在这里插入图片描述
执行以上的代码,将会在工作空间里创建一个目标文件。执行以上的代码,将会在工作空间里创建一个目标文件。

读取数据
在这里插入图片描述配置文件,封装数据
使用properties对象的load方法加载流,读取目标文件的内容,然后再用BeanConfig的set,get方法,把properties解析出来的值传到BeanConfig类里面
在这里插入图片描述
在这里插入图片描述

总结:当我们运用反射机制时,总是离不开以下几个步骤:
一.获取实例对象(反射机制的基础)
1.获取class的对象,Class clazz = Class.forName(“目标路径”)
目标.class
目标对象.getClass.
2.获取构造方法:Constroctor cons = clazz.getConstroctor(),根据具体目标方法而定,若是有参,则需要些该参数的 泛型.class 例如:int 为 Integer.class ,String :String.class等。
3.创建实例:Object obj = cons.newInstance();
第二步可以省略 直接 Object obj = clazz.newInstance()
返回的是Object,obj就是我们创建的实例.

二. 使用实例执行方法
1.先进行步骤一,获得实例对象。
2.获取方法:Method m = clazz.getMethod("",Integer.class);
第一个参数传方法名字,第二个若是该方法有参数,则需要声明其类型。例:Integer.class
3.执行方法: Object r = m.invoke(实例(obj),值) ,传入方法的实例,与值即可。

**若是static方法,则不需要传入实例Object r = m.invoke(null,值)。

若是值为数组,因为第二个值为 可变参数,JVM内部传递会将实参数组打乱,即把里面的值拆成一个一个的, 解决方法有二:
1.强转为Object类型
2.用另一个数组将我们要传递的数组包裹起来:
new Object[ss],ss为字符串数组。
三. 使用实例操作字段
1.先进行步骤一获得实例对象。
2.获取字段:Field field = clazz.getField(“目标字段名称”)
3.操作字段:1)field.set(obj,值)。
2)field.get(obj) 有返回值,为Object类型。

四. 实际操作
一.配置文件,封装数据
1.先创建bean.properties, data.properties, User类,BeanConfig.
2. 首先,BeanConfig类里面有bean.properties, data.properties里的所有属性,且添加了get,set方法。
3.在testdemo里面,首先创建BeanConfig的实例对象beanConfig,然后创建Properties的实例对象prop。
4.prop.load(new InputStreamReader(new FileInputStream(“bean.properties”), “UTF-8”));即利用prop.load方法找到目标文件bean.properties,并且prop.getProperty(“id”)解析里面的数据,
5.数据解析完成后,beanconfig.setId(prop.getProperty(“id”));
将解析出来的数据传到BeanConfig。
6.同理重复第4步,解析 data.properties里的内容,然后再用beanConfig穿走
二.
1.创建 类 的实例化1)Class clazz = Class.forName(“目标路径”) 。2) Object obj = clazz.newInstance()
2.获取方法:Method m = clazz.getMethod(“方法名”,Integer.class);
执行方法: Object r = m.invoke(实例(obj),值) ,传入方法的实例,与值即可。
invoke需要传的值,通过beanConfig.getid,得到。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值