Java ClassFile
对于一个具体的.class
而言,它是遵循ClassFile结构的。这个数据结构位于 Java Virtual Machine Specification的 The class File Format部分。
ClassFile {
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_count;
method_info methods[methods_count];
u2 attributes_count;
attribute_info attributes[attributes_count];
}
其中,
- u1: 表示占用1个字节
- u2: 表示占用2个字节
- u4: 表示占用4个字节
- u8: 表示占用8个字节
而cp_info、field_info、method_info和attribute_info表示较为复杂的结构,但它们也是由u1、u2、u4和u8组成的。
相应的,在.class文件当中,定义的字段,要遵循field_info的结构。
field_info {
u2 access_flags;
u2 name_index;
u2 descriptor_index;
u2 attributes_count;
attribute_info attributes[attributes_count];
}
同样的,在.class文件当中,定义的方法,要遵循method_info的结构。
method_info {
u2 access_flags;
u2 name_index;
u2 descriptor_index;
u2 attributes_count;
attribute_info attributes[attributes_count];
}
在method_info结构中,方法当中方法体的代码,是存在于Code属性结构中,其结构如下:
Code_attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 max_stack;
u2 max_locals;
u4 code_length;
u1 code[code_length];
u2 exception_table_length;
{ u2 start_pc;
u2 end_pc;
u2 handler_pc;
u2 catch_type;
} exception_table[exception_table_length];
u2 attributes_count;
attribute_info attributes[attributes_count];
}
小结
本文提供了classFile的类结构参考,大家可以对照jdk官网文档进行相关学习,希望对你能有所帮助。
网友评论