ClassFile表
magic ----- class文件的前四个字节0xCAFEBABE
minor_version -------- 次版本号
major_version -------- 主版本号
constant_pool_count ------- 常量池列表中的入口个数+1(索引为0)
constant_pool ------常量池入口列表
access_flag -------- 类或接口的信息,例如是类或接口?final?abstract?public?
this_class --------- 值为常量池的一个索引,该索引的tag为constant_class,tag后紧跟的name_index为另一索引,该索引的tag为constant_utf8,其中包含这个类或接口的全限定名
super_class -------- 值为常量池索引,类型通this_class,除了Object外,super_class对所有的类均有效,Object的super_class为0, 接口的super_class为java.lang.Object.
interfaces_count ------- 该类直接实现或者由接口扩展的父接口的数量
interfaces -------- 数组,每一个值为父接口的常量池的索引,类型同this_class
fileds_count ------ 不包括从父类或接口继承的field,可能会包含class中没有声明的字段,这是因为java编译器可能在编译阶段向类或接口中添加了字段,例如为了保持对外部类示例的引用,java编译器会为每个外围类实例添加实例变量
fields ------- 包含了filed_info表, 包含字段名称,描述符和修饰符
methods_count ------ 方法的总计数,只包括类或接口显示定义的方法,不包括继承的
methods ------ 包括method_info表,方法名和描述符,如果方法不是本地或抽象的,则还包含局部变量所需的栈空间长度,为方法所捕获的异常表,局部变量表等。
attributes_count -------
attrbutes -------
常量池中的三种字符串:
全限定名 -- 例如java/util/Hashtable
简单名称 -- filed和method名称的简单表示
描述符 -- filed类型或者method的返回值和parameters,type用约定的B,C,D,F,I,J,S,Z,V,[,L等表示,例如 int i的描述符为I, int getSize(String s)的描述符为(java/lang/String)I
常量池info表
CONSTANT_Utf8_info表
表中各项如下
tag -- u1,CONSTANT_Utf8
length -- u2,bytes的字节数
bytes -- u1*length, 字符
CONSTANT_Integer_info表
tag -- CONSTANT_Integer_info
bytes -- u4, 按照高位在前的格式存储int类型值
CONSTANT_Float_info表
tag-- CONSTANT_Float_info
bytes -- u4, 按照高位在前的格式存储float类型值
CONSTANT_Double_info表
tag-- CONSTANT_Double_info
bytes -- u8, 按照高位在前的格式存储double类型值
CONSTANT_Long_info表
tag -- CONSTANT_Long_info
bytes -- u8, 按照高位在前的格式存储long类型值
CONSTANT_String_info
tag -- CONSTANT_String_info
string_infex -- u2,CONSTANT_Utf8_info表的索引
CONSTANT_Fieldref_info表
tag -- CONSTANT_Fieldref_info
class_index -- u2, 声明的字段的类或接口的CONSTANT_Class_info入口的索引
name_and_type_index -- u2, CONSTANT_NameAndType_info入口的索引,该入口提供了字段的简单名称和描述符
CONSTANT_Methodref_info表
tag -- CONSTANT_Methodref_info
class_index -- 被引用方法的类的CONSTANT_Class_info
name_and_type_index -- CONSTANT_NameAndType_info入口的索引,该入口提供了方法的简单名称和描述符
CONSTANT_InterfaceMethod_info表
tag -- CONSTANT_InterfaceMethod_info
class_index -- 被引用方法的接口的CONSTANT_Class_info
name_and_type_index -- 方法的简单名称和描述符
CONSTANT_NameAndType_info表
tag -- CONSTANT_NameAndType_info
name_index -- CONSTATNT_Utf8_info的入口索引,该入口给出了字段或方法的名称
name_and_type_index -- CONSTATNT_Utf8_info的入口索引,该入口给出了字段或方法的描述符
field_info表
class或Interface中声明的字段都会由class文件中的一个名为field_info的可变长度的表描述
access_flags -- private,public,protect,static,final,volatile,transient标志
name_index -- 名称的CONSTATNT_Utf8_info入口索引
descriptior_index -- 描述符的CONSTATNT_Utf8_info入口索引
attributes_count --
attributes --
method_info表
class或Interface中声明的方法都会由class文件中的一个名为method_info的可变长度的表描述
access_flags -- private,public,protect,static,final,volatile,native,abstract,synchronized,strictFP标志
name_index -- 名称的CONSTATNT_Utf8_info入口索引
descriptior_index -- 描述符的CONSTATNT_Utf8_info入口索引
attributes_count --
attributes --