原理-Android 综合Java

java字节码文件

2019-09-26  本文已影响0人  快点给我想个名

参考链接:美团技术团队

使用javap -verbose命令分析一个字节码文件时,将会分析该字节码文件的魔术、版本号、常量池、类信息、类的构造方法、类中的方法信息、类变量与成员变量等信息。


字节码.png
java字节码整体结构
image.png
魔术
版本号
常量池
访问标志

描述该Class是类还是接口,以及是否被Public、Abstract、Final等修饰符修饰。


访问标志.png
类索引、父类索引、接口索引

字段表

用于描述类和接口中声明的变量。这里的字段包含了类级别变量以及实例变量。但是不包括方法内部声明的局部变量。字段表也分为两部分,第一部分为两个字节,描述字段个数;第二部分是每个字段的详细信息fields_info。字段表结构如下图所示:


字段表.png
方法表

字段表结束后为方法表,方法表也是由两部分组成,第一部分为两个字节描述方法的个数;第二部分为每个方法的详细信息。方法的详细信息较为复杂,包括方法的访问标志、方法名、方法的描述符以及方法的属性,如下图所示:


方法表.png
Code结构

Code attribute的作用是保存该方法的结构,如下图所示:


Code attribute.png
  1. start_pc和end_pc表示在code数组中的从start_pc到end_pc处(包含start_pc,不包含end_pc)的指令抛出的异常会由这个表项来处理。
  2. handler_pc表示处理异常的代码的开始处。
  3. catch_type表示会被处理的异常类型,它指向常量池里的一个异常类。当catch_type为0时,表示处理所有的异常。
上一篇下一篇

猜你喜欢

热点阅读