class字节码文件结构
| 类型 |
名称 |
说明 |
长度 |
数量 |
| u4 |
magic |
魔数,识别Class文件格式 |
4个字节 |
1 |
| u2 |
minor_version |
副版本号(小版本) |
2个字节 |
1 |
| u2 |
major_version |
主版本号(大版本) |
2个字节 |
1 |
| u2 |
constant_pool_count |
常量池计数器 |
2个字节 |
1 |
| cp_info |
constant_pool |
常量池表 |
n个字节 |
constant_pool_count-1 |
| u2 |
access_flags |
访问标识 |
2个字节 |
1 |
| u2 |
this_class |
类索引 |
2个字节 |
1 |
| u2 |
super_class |
父类索引 |
2个字节 |
1 |
| u2 |
interfaces_count |
接口计数器 |
2个字节 |
1 |
| u2 |
interfaces |
接口索引集合 |
2个字节 |
interfaces_count |
| u2 |
fields_count |
字段计数器 |
2个字节 |
1 |
| field_info |
fields |
字段表 |
n个字节 |
fields_count |
| u2 |
methods_count |
方法计数器 |
2个字节 |
1 |
| method_info |
methods |
方法表 |
n个字节 |
methods_count |
| u2 |
attributes_count |
属性计数器 |
2个字节 |
1 |
| attribute_info |
attributes |
属性表 |
n个字节 |
attributes_count |
Class文件版本号和平台的对应
| 主版本(十进制) |
副版本(十进制) |
编译器版本 |
| 45 |
3 |
1.1 |
| 46 |
0 |
1.2 |
| 47 |
0 |
1.3 |
| 48 |
0 |
1.4 |
| 49 |
0 |
1.5 |
| 50 |
0 |
1.6 |
| 51 |
0 |
1.7 |
| 52 |
0 |
1.8 |
| 53 |
0 |
1.9 |
| 54 |
0 |
1.10 |
| 55 |
0 |
1.11 |
class文件数据类型
| 数据类型 |
定义 |
说明 |
| 无符号数 |
无符号数可以用来描述数字、索引引用、数量值或按照utf-8编码构成的字符串值。 |
其中无符号数属于基本的数据类型。 以u1、u2、u4、u8来分别代表1个字节、2个字节、4个字节和8个字节 |
| 表 |
表是由多个无符号数或其他表构成的复合数据结构。 |
所有的表都以“_info”结尾。 由于表没有固定长度,所以通常会在其前面加上个数说明。 |
类型描述符
| 标志符 |
含义 |
| B |
基本数据类型byte |
| C |
基本数据类型char |
| D |
基本数据类型double |
| F |
基本数据类型float |
| I |
基本数据类型int |
| J |
基本数据类型long |
| S |
基本数据类型short |
| Z |
基本数据类型boolean |
| V |
代表void类型 |
| L |
对象类型,比如:Ljava/lang/Object; |
| [ |
数组类型,代表一维数组。比如:double[][][] is [[[D |
常量类型和结构
| 类型 |
标志(或标识) |
描述 |
| CONSTANT_utf8_info |
1 |
UTF-8编码的字符串 |
| CONSTANT_Integer_info |
3 |
整型字面量 |
| CONSTANT_Float_info |
4 |
浮点型字面量 |
| CONSTANT_Long_info |
5 |
长整型字面量 |
| CONSTANT_Double_info |
6 |
双精度浮点型字面量 |
| CONSTANT_Class_info |
7 |
类或接口的符号引用 |
| CONSTANT_String_info |
8 |
字符串类型字面量 |
| CONSTANT_Fieldref_info |
9 |
字段的符号引用 |
| CONSTANT_Methodref_info |
10 |
类中方法的符号引用 |
| CONSTANT_InterfaceMethodref_info |
11 |
接口中方法的符号引用 |
| CONSTANT_NameAndType_info |
12 |
字段或方法的符号引用 |
| CONSTANT_MethodHandle_info |
15 |
表示方法句柄 |
| CONSTANT_MethodType_info |
16 |
标志方法类型 |
| CONSTANT_InvokeDynamic_info |
18 |
表示一个动态方法调用点 |
常量类型和结构细节

创新互联主营黑山网站建设的网络公司,主营网站建设方案,app软件开发公司,黑山h5微信小程序开发搭建,黑山网站营销推广欢迎黑山等地区企业咨询
访问标志
| 标志名称 |
标志值 |
含义 |
| ACC_PUBLIC |
0x0001 |
标志为public类型 |
| ACC_FINAL |
0x0010 |
标志被声明为final,只有类可以设置 |
| ACC_SUPER |
0x0020 |
标志允许使用invokespecial字节码指令的新语义,JDK1.0.2之后编译出来的类的这个标志默认为真。(使用增强的方法调用父类方法) |
| ACC_INTERFACE |
0x0200 |
标志这是一个接口 |
| ACC_ABSTRACT |
0x0400 |
是否为abstract类型,对于接口或者抽象类来说,次标志值为真,其他类型为假 |
| ACC_SYNTHETIC |
0x1000 |
标志此类并非由用户代码产生(即:由编译器产生的类,没有源码对应) |
| ACC_ANNOTATION |
0x2000 |
标志这是一个注解 |
| ACC_ENUM |
0x4000 |
标志这是一个枚举 |
字段表访问标志
| 标志名称 |
标志值 |
含义 |
| ACC_PUBLIC |
0x0001 |
字段是否为public |
| ACC_PRIVATE |
0x0002 |
字段是否为private |
| ACC_PROTECTED |
0x0004 |
字段是否为protected |
| ACC_STATIC |
0x0008 |
字段是否为static |
| ACC_FINAL |
0x0010 |
字段是否为final |
| ACC_VOLATILE |
0x0040 |
字段是否为volatile |
| ACC_TRANSTENT |
0x0080 |
字段是否为transient |
| ACC_SYNCHETIC |
0x1000 |
字段是否为由编译器自动产生 |
| ACC_ENUM |
0x4000 |
字段是否为enum |
类索引、父类索引、接口索引
| 长度 |
含义 |
| u2 |
this_class |
| u2 |
super_class |
| u2 |
interfaces_count |
| u2 |
interfaces[interfaces_count] |
属性的通用格式
| 类型 |
名称 |
数量 |
含义 |
| u2 |
attribute_name_index |
1 |
属性名索引 |
| u4 |
attribute_length |
1 |
属性长度 |
| u1 |
info |
attribute_length |
属性表 |
数据类型和默认初始值对应
| 类型 |
默认初始值 |
| byte |
(byte)0 |
| short |
(short)0 |
| int |
0 |
| long |
0L |
| float |
0.0f |
| double |
0.0 |
| char |
\u0000 |
| boolean |
false |
| reference |
null |
网页标题:class字节码文件结构
标题来源:
http://www.jxjierui.cn/article/dsdihjj.html