Java之反射-reflect-戴夫的农场


前言

框架很多内容都是基于java基础里面的反射机制而来的,很多时候就搞不明白怎么就可以这样子,今天我们就来写一篇关于java反射机制的文章记录一下,到底什么是反射,以及怎么用的,什么时候用哪种方式,作用是什么,在这里今天都能看到。


提示:以下是本篇文章正文内容,下面案例可供参考

一、什么是反射机制?

官方是这么定义反射机制的:反射是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。

啥玩意,这也太官方了,一听这解释人都有点懵了。
不怕,我们直接上图:
在这里插入图片描述
所谓的反射小编认为就是字节码文件加载到内存中去时的这个过程,在这个过程中我们可以通过一些相关操作去调用到原java类里面的属性和方法,这就叫反射。

二、如何使用反射

1.创建字节码对象

代码如下(以上图示例):

创建字节码对象有三种方式:
第一种:Class.forName("该类的全限定名");
比如:
Class.forName("com.zhiyuan.frank.Person");

第二种:类名.class;
比如:
Person.class

第三种:对象名.getClass();
比如:
Person p = new Person();
p.getClass();

2.使用字节码对象调用相应的方法

在这里插入图片描述
字节码文件加载到内存之后,源文件里面的成员变量和成员方法都被抽象成了内存空间中的一个对象,所以有了字节码对象之后,想要调用里面的成员方法就调用获取成员方法的方法,比如getMethod();想要获取成员属性就调用获取成员属性的方法,比如getFiled();

总结

总而言之首先就是要创建字节码对象,有了字节码对象就能拿到加载到内存里面的方法信息,拿到了方法对象就可以调用invoke去执行原文件的方法了。这个过程就是反射。
Class.forName()这种情况下多用于加载配置时或者使用jar包里面的类时。比如jdbc连接数据库就是用这种方式加载的驱动.
类名.class这种情况多用于传递实际参数的时候
对象名.getClass()这种情况多用于原文件的对象类已经具备的时候

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值