class类分析

class类的组成
- 魔数(Magic)
- 版本号(Version)
- 常量池(constant_pool)
- 访问标志(access_flag)
- 当前类索引(this_class)
- 父类索引(super_class)
- 接口索引 (interfaces)
- 字段表(fields)
- 方法表(methods)
- 附加属性(attributes)
魔数(Magic)
一个class文件的魔数不会改变 在开头 0xCAFEBABE jvm是靠魔数判断是不是一个class类版本号(Version)
副版本号(minor_version)
主版本号(major_version)
版本号是jvm判断class类能不能被正常执行 class类的版本号必须在jvm所支持的版本号内才能正常执行
常量池(constant_pool)
常量池计数器(constant_pool_count)
常量池(constant_pool[])
计数器是常量池的个数加一 常量池 例如:class数据 00 13 0A 00 03 00 10 07 .......4........ 00 11 07 00 12 01 00 01 61 01 00 01 49 01 00 01 ........a...I... 62 01 00 06 3C 69 6E 69 74 3E 01 00 03 28 29 56 b...<init>...()V 01 00 04 43 6F 64 65 01 00 0F 4C 69 6E 65 4E 75 ...Code...LineNu 6D 62 65 72 54 61 62 6C 65 01 00 12 4C 6F 63 61 mberTable...Loca 6C 56 61 72 69 61 62 6C 65 54 61 62 6C 65 01 00 lVariableTable.. 04 74 68 69 73 01 00 09 4C 63 6F 6D 2F 41 41 41 .this...Lcom/AAA 3B 01 00 0A 53 6F 75 72 63 65 46 69 6C 65 01 00 ;...SourceFile.. 08 41 41 41 2E 6A 61 76 61 0C 00 07 00 08 01 00 .AAA.java....... 07 63 6F 6D 2F 41 41 41 01 00 10 6A 61 76 61 2F .com/AAA...java/ 6C 61 6E 67 2F 4F 62 6A 65 63 74 00 13 代表19 说明常量池有18个数据 1:0A 00 03 00 10 #3.#16 2:07 00 11 #17 3:07 00 12 #18 4:01 00 01 61 a 5:01 00 01 49 I 6:01 00 01 62 b 7:01 00 06 3C 69 6E 69 74 3E <init> 8:01 00 03 28 29 56 ()V 9:01 00 04 43 6F 64 65 Code 10:01 00 0F 4C 69 6E 65 4E 75 6D 62 65 72 54 61 62 6C 65 LineNumberTable 11:01 00 12 4C 6F 63 61 6C 56 61 72 69 61 62 6C 65 54 61 62 6C 65 LocalVariableTable 12:01 00 04 74 68 69 73 this 13:01 00 09 4C 63 6F 6D 2F 41 41 41 3B Lcom/AAA 14:01 00 0A 53 6F 75 72 63 65 46 69 6C 65 SourceFile 15:01 00 08 41 41 41 2E 6A 61 76 61 AAA.java 16:0C 00 07 00 08 #7:#8 17:01 00 07 63 6F 6D 2F 41 41 41 com/AAA 18:01 00 10 6A 61 76 61 2F 6C 61 6E 67 2F 4F 62 6A 65 63 74 java/lang/Object
访问标志(access_flags)
描述类或者接口的访问限权类索引(this_class)
为常量池中的某一项有效索引值父类索引(super_class)
要么是0 要么是常量池中的有效索引值接口计数器(interfaces_count)
表示单当前类或接口的直接超接口数量接口表(interfaces[])
每个成员必须是常量池中某项的有效索引值字段计数器(fields_count)
表示class文件的fielda表的个数字段表(fields[])
当前类或接口中的字段的完整描述,不包括从父类或父接口继承的字段方法计数器(methods_count)
方法表
属性计数器
属性表
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!