标签:count ACC CONSTANT 字节 常量 u2 JVM 加载
类文件结构
根据JVM的规范,类文件的结构如下:
类型 | 名称 | 解释 |
---|---|---|
u4 | magic | 魔数 |
u2 | minor_version | 小版本号 |
u2 | major_version | 主版本号 |
u2 | constant_pool_count | 常量池长度 |
cp_info | constant_pool[constant_pool_count - 1] | 常量池信息 |
u2 | access_flags | 访问修饰 |
u2 | this_class | 当前类信息 |
u2 | super_class | 父类信息 |
u2 | interfaces_count | 接口长度 |
u2 | interfaces[interfaces_count] | 接口信息 |
u2 | fields_count | 类中成员变量长度 |
field_info | fields[fields_count] | 成员变量信息 |
u2 | methods_counts | 方法长度 |
method_info | methods[methods_count] | 方法信息 |
u2 | attributes_count | 附加属性长度 |
attribute_info | attributes[attributes_count] | 附加属性信息 |
魔数
占4个字节。用来表示这是一个java文件,java的魔数是ca fe be be
小版本号和主版本号
各占2个字节,共4个字节。用来表示类的版本,例如 00 00 00 34 ,其中 00 34 就表示是java8
常量池
常量池长度
占2个字节,位置在8~9字节。用来表示常量池长度,例如 00 23 表示常量池有2*16+3-1 = 34项,其中#0项不计入其中,也没有值。
常量池信息对应
值 | 类型 |
---|---|
01 | CONSTANT_Utf8 |
03 | CONSTANT_Integer |
04 | CONSTANT_Float |
05 | CONSTANT_Long |
06 | CONSTANT_Double |
07 | CONSTANT_Class |
08 | CONSTANT_String |
09 | CONSTANT_Fieldref |
0a | CONSTANT_Methodref |
0b | CONSTANT_InterfaceMethofref |
0c | CONSTANT_NameAndType |
of | CONSTANT_MethodHandle |
10 | CONSTANT_MethodType |
12 | CONSTANT_InvokeDynamic |
Method
methods_counts
占用2个字节。表示方法的个数
method_info
方法信息。一般有构造方法init 和 主函数main。
其它
访问标识对应
值 | 类型 |
---|---|
0x0001 | ACC_PUBLIC |
0x0010 | ACC_FINAL |
0x0020 | ACC_SUPER |
0x0200 | ACC_INTERFACE |
0x0400 | ACC_ABSTRACT |
0x1000 | ACC_SYNTHETIC |
0x2000 | ACC_ANNOTATION |
0x4000 | ACC_ENUM |
Field信息对应
Type | FieldType |
---|---|
byte | B |
char | C |
double | D |
float | F |
int | I |
long | J |
reference | L ClassName;(引用类型) |
short | S |
boolean | Z |
reference | [(一维数组) |
==================== 参 考 文 献 ====================
标签:count,ACC,CONSTANT,字节,常量,u2,JVM,加载 来源: https://www.cnblogs.com/S2Jgogo/p/16255329.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。