Java反射札记

Java反射相关内容,在阅读一些开源框架和自己动手封装逻辑时常要用到,以前陆陆续续地看到过一些文章,但是最终留下的是破碎的代码片段和类名,所以这次重新敲一遍反射的代码,作如下记录。

上游知识

类加载流程图:

注:图片来自https://www.cnblogs.com/snake-hand/p/3151381.html

Java内存模型如下:

注:图片来自KevinJaz(https://www.zhihu.com/question/24304289)

在代码编译后,会生成JVM(Java虚拟机)能够识别的二进制字节流文件(*.class)。之后JVM把Class文件中的类描述数据从文件加载到内存,并对数据进行校验、转换解析、初始化,使这些数据最终成为可以被JVM直接使用的Java类型。

使用场景举例

我们在写java代码时,对象的引用,类的结构、方法和属性等信息都要求编译时是确切的。有时候我们无法在编译期确认这些信息,比如有两个人同时开发,第一个人写的类需要调用第二个人写的类里的方法,不巧第二个人还没写好,这时候第一个人就没法调用了。但是第一个人知道调用的方法名和参数,这些能确定,那么这时候就可以用反射。

把代码结构的确定性从编译期延迟到运行时,性能受到损害,换来了灵活性的提高。

代码实现

反射实例

反射属性

反射方法

改变数组

文末

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20171221G01ATY00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券