????ClassFile?????16????????????????е?????????????????£?
????(1) magic
???????Class??????4??????????????????magic number??: 0xCAFEBABE????????????????????????????Java Class??????Java Class??????????????????????0xCAFEBABE??????????????Java Class????????????????淶J??????Java?????“Oak”?????????????????????????????Java????????????????????????????????J
????(2) minor_version??major_version
????Class?????????4??????????Ρ????汾????????и??????汾??????д?汾???Java?????????????Class????????Class?????汾???????Java?????????????????Ч??Χ??Java??????????????Class?????????J2SE5.0?汾????????????????J2SE6.0?汾????????????????Class?????
????(3) constant_pool_count
?????汾??????????constant_pool_count????????????????????????????????????Class????г??????б???????????????????????????????0??constant_pool??????????????????Class?????constant_pool?б??У?????????????Java??????????????????????????б????????constant_pool_count-1?????????????????????????1??constant_pool_count-1??
??????????????м????????????????£?????????constant_pool?????????б????constant_pool[ ]???????????????????б??е?????????????(???)????Щ?????????????????????????cp_type???????
????cp_type
???????????                                ????
????CONSTANT_Class                           7
????CONSTANT_Fieldref                        9
????CONSTANT_Methodref                       10
????CONSTANT_InterfaceMethodref              11
????CONSTANT_String                           8
????CONSTANT_Integer                          3
????CONSTANT_Float                            4
????CONSTANT_Long                             5
????CONSTANT_Double                           6
????CONSTANT_NameAndType                      12
????CONSTANT_Utf8                              1
????(4) constant_pool[ ]
????constant_pool_count????????constant_pool[ ]???????????б?????д洢???ClassFile???????????????????????????????????????final????????????????????????Java Class????У?????????????????cp_info??????????????????б?????constant_pool_count-1???????????????cp_info????????constant_pool[ ]???顣?????constant_pool_count-1??constant_pool??????????????????????????????????????????????????????????????
????cp_info
????cp_info???tag?????????????byte???????????????cp_info?????????????????tag?????????
???????????????cp_info????????????????Class????У???????????о?????????CONSTANT_Xxxx_info??constant_pool??????????????cp_info???tag?????????????????????????cp_info?????info[]???????????????磬CONSTANT_Class_info???info[]???“u2 name_index”????CONSTANT_Utf8_info???info[]???“u2 length; u1 bytes[length];”?????????????cp_info?????????????С?????????????????????????С????????????????б??е????????????????????????????????б???С?????????Class????У????????б???????????????????
??????cp_info?????cp_type????????????????cp_info????tag(???)?????1????????cp_info?????CONSTANT_Utf8_info???????cp_info????tag?????3???????cp_info?????CONSTANT_Integer_info???????????????????Щ????????????JVM Spec??(2nded)???????????Inside JVM??(2nded)????????
????(5) access_flags
???????????????????????access_flags??access_flags?????????Java??????Щ??????????????磬?????????????ж????????????????????????????????????????У????????Щ???η???????????????????????????????access_flags??????Java???????????????????????????(mask???????????????access_flags????????з?????????????????δ????????λ??Class????ж????????0?????磬??access_flags?????0x0001???????Java??????????????ACC_PUBLIC????access_flags?????0x0011???????Java??????????????ACC_PUBLIC??ACC_FINAL?????????????????λ?????????0x0011?????????????)??
???????Java?????????access_flags????????±??????
????access_flags
???????????         ?           ????
????ACC_PUBLIC     0x0001   ?????public?????????????????
????ACC_FINAL      0x0010   ?????final??????????????
????ACC_SUPER      0x0020   ??invokespecial????????????
????ACC_INTERFACE  0x0200   ????????????????????????
????ACC_ABSTRACT   0x0400   ?????abstract????????????
?????????????????????????Java?????????????б???е??????????????????е???????н????????????????????JVM Spec??(2nded)??