Java中什么是反射

举报
dfsafdfas 发表于 2021/01/12 13:51:50 2021/01/12
【摘要】 我们可以看到,之前我们所运行的程序都是在编译时就已经链接了所有所需的类,也就是说程序运行的时候,项目所需要的类都已经加载好了,而反射则不是这样,它允许程序在运行的时候再加载、探知、使用那些在编译时未知的类,它是逆着来的。大概也可以这样理解,就是在程序加载运行的时候,同时再加载、使用一些未知的类,这两个操作是同时运行的。加载这些未知的类时,也可以通过一些方法得到这些类的相关信息类比一个现实生活...

我们可以看到,之前我们所运行的程序都是在编译时就已经链接了所有所需的类,也就是说程序运行的时候,项目所需要的类都已经加载好了,而反射则不是这样,它允许程序在运行的时候再加载、探知、使用那些在编译时未知的类,它是逆着来的。大概也可以这样理解,就是在程序加载运行的时候,同时再加载、使用一些未知的类,这两个操作是同时运行的。加载这些未知的类时,也可以通过一些方法得到这些类的相关信息

类比一个现实生活中的例子
1,姐妹,你见我的修眉刀没?
2,我昨天放粉饼的时候,好像在化妆桌的小抽屉里看到了,你去找找看看吧
3,好的

然后你从“粉饼”推出了“化妆桌的小抽屉”,然后找到了“修眉刀”
其实我们的反射也是这样的,在不知道类信息的时候,从类或者对象中推导出Class类型,然后再从Class中获取类的一些相关信息

这样我们也就知道了,要想拿到类的相关信息,第一步就需要先拿到Class类。

先说说什么是Class类

Class 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象。也就是说Class类是以上这些数据类型的类,也可以理解为是他们的“爷爷”
假如现在有一个Person类,Person类的实例对象是person,现在要通过Person类或者实例person拿到Class,然后再通过Class获取Person类的一些相关信息,比如方法名,修饰符、属性、方法、构造函数等等

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。