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 --
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?