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代码时,对象的引用,类的结构、方法和属性等信息都要求编译时是确切的。有时候我们无法在编译期确认这些信息,比如有两个人同时开发,第一个人写的类需要调用第二个人写的类里的方法,不巧第二个人还没写好,这时候第一个人就没法调用了。但是第一个人知道调用的方法名和参数,这些能确定,那么这时候就可以用反射。
把代码结构的确定性从编译期延迟到运行时,性能受到损害,换来了灵活性的提高。
代码实现
反射实例
反射属性
反射方法
改变数组
文末
领取专属 10元无门槛券
私享最新 技术干货