在JVM虚拟机规范第四章中规定了class文件必须是一个固定的结构,如下所示:
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];}
在JVM规范中u1、u2、u4分别表示的是1、2、4个字节的无符号数,可使用java.io.DataInputStream类中的对应方法:readUnsignedByte、readUnsignedShort、readInt方法读取。除此之外,表结构(table)由任意数量的可变长度的项组成,用于表示class中的复杂结构,如上述的:cp_info、field_info、method_info、attribute_info。
TestHelloWorld.class十六进制:
