如何通过反射获得方法的真实参数名(以及扩展研究)( 三 )
class文件可以用一个结构来表示:
文章插图
这个结构中每一项大致的含义我们来简单说明一下吧(详情请查看虚拟机规范):
开头的magic u4叫做“魔数” , Java虚拟器通过读取这个数来判断当前文件是不是有效的u4代表它是无符号的4个byte , 这个数始终应该是0xCAFEBABE;
minor_version、major_version分别是class文件的次版本和主版本;
u2 constant_pool_count 、cp_info constant_pool[constant_pool_count-1]代表常量池中项目数和代表了常量池本身;
u2 access_flags : 代表class访问标记 , 例如:public protected;
u2 this_class : 代表放置类名在常量池中的索引;
u2 super_class : 代表父类名称在常量池中的索引;
u2 interfaces_count; u2 interfaces[interfaces_count]; 代表所实现的接口集合的大小 , 及接口集合本身;
u2 fields_count; field_info fields[fields_count]; 代表属性集合大小以及属性集合本身;
u2 methods_count; method_info methods[methods_count]; 代表方法集合大小以及方法集合本身;
u2 attributes_count; attribute_info attributes[attributes_count]; java class文件内部属性信息集合大小和内部属性信息集合本身 。 这里提一下 , 我们前面的提到的LocalVariableTable的信息就存储在这里 。
【如何通过反射获得方法的真实参数名(以及扩展研究)】到了这里我们大致回顾一下吧 , 我们从尝试解决反射获得方法参数真实名称开始 , 了解了Java编译参数、Spring自动绑定相关处理原理、jdk8编译参数新特性、以及Java class文件的结构 。 通过这个过程 , 我们看到 , 就一个“自动绑定”这个平常都感觉不到它存在的小功能背后 , 还有这么多深层次的技术在里面 , 由此可见 , Spring之所以如此强大而且易用 , 离不开各类底层技术的支持 , 这就让我想起以前看到过的一位技术博主的标语:“只有深入 , 方能浅出” , 想想确实是这个道理 。
- 页面|如何简单、快速制作流程图?上班族的画图技巧get
- 培育|跨境电商人才如何培育,长沙有“谱”了
- 抖音小店|抖音进军电商,短视频的商业模式与变现,创业者该如何抓住机遇?
- 计费|5G是如何计费的?
- 车轮旋转|牵引力控制系统是如何工作的?它有什么作用?
- 视频|短视频如何在前3秒吸引用户眼球?
- Vlog|中国Vlog|中国基建如何升级?看5G+智慧工地
- 涡轮|看法米特涡轮流量计如何让你得心应手
- 手机|OPPO手机该如何截屏?四种最简单的方法已汇总!
- 和谐|人民日报海外版今日聚焦云南西双版纳 看科技如何助力人象和谐