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

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

代码实现

反射实例

反射属性

反射方法

改变数组

文末

本文来自企鹅号 - CodeThings媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏蓝天

使用#include消除重复代码

上述是最为常用的,对于C++程序,闭包可能用得相对少一点。下列代码使用的是第5种:利用#include消除重复代码:

9910
来自专栏李家的小酒馆

Sublime 正则替换

13640
来自专栏JackieZheng

FreeMarker模板开发指南知识点梳理

freemarker是什么? 有什么用? 怎么用? (问得好,这些都是我想知道的问题) freemarker是什么?   FreeMarker 是一款 模板引擎...

26390
来自专栏技术栈大杂烩

C: #ifdef的简单条件编译

今天在看源码时, 发现一个很神奇的用法, 可能有大神在以前早已知晓甚至经常使用, 不过对于菜鸟的我来说, 还是像发现新大陆那样 , 究竟是什么语法呢? 我们一步...

26210
来自专栏C/C++基础

C++中的定位放置new(placement new)

一般来说,使用new申请空间时,是从系统的“堆”(heap)中分配空间。申请所得的空间的位置时根据当时的内存的实际使用情况决定的。但是,在某些特殊情况下,可能需...

10420
来自专栏安恒信息

一次开发的意外逆向之旅

笔者最近从事windows内核开发的时候因为功能需要,所以需要对PspSetCreateProcessNotifyRoutine回调函数数组进行遍历,于是笔者照...

16610
来自专栏琯琯博客

PHP 优化技巧

35050
来自专栏从零开始学 Web 前端

C51单片机中data、idata、xdata、pdata的区别

data: 固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。

17140
来自专栏Java编程技术

基于rxjava的生产消费模型

最近在看springcloud的熔断机制的实现,发现底层使用的rxjava实现,就看了下rxjava的使用,发现rxjava使用可也便捷实现前面讲解的定时生产与...

10020
来自专栏丑胖侠

《Drools7.0.0.Final规则引擎教程》第4章 4.2 ruleflow-group&salience

ruleflow-group 在使用规则流的时候要用到ruleflow-group属性,该属性的值为一个字符串,作用是将规则划分为一个个的组,然后在规则流当中通...

25470

扫码关注云+社区

领取腾讯云代金券