工欲善其事必先利其器之class文件

class文件格式

类型 名称 数量 说明
u4 magic 1 0xCAFEBABE
u2 minor_version 1 jdk版本号
u2 major_version 1 jdk版本号
u2 constant_pool_count 1 从1开始、0项代表"不引用任何常量池项目“
cp_info constant_pool constant_pool_count-1 字面量(literal),符号引用(symbolic reference)[类接口全限定名、字段名和描述符、方法名和描述符]
u2 access_flags 1
u2 this_class 1
u2 super_class 1
u2 interfaces_count 1
u2 interfaces interface_count
u2 fields_count 1
field_info fields fields_count
u2 methods_count 1
method_info methods methods_count
u2 attributes_count 1
attribute_info attributes attributes_count
  • 常量池每一项都是一个表,1.7之前有11种表结构数据,1.7新增3种;字段、方法符号引用运行时转换获取入口

常量池项目类型

类型 标志(tag) 描述 内容
CONSTANT_Utf8_info 1 UTF-8编码字符串 tag[u1]-length[u2]-bytes[u1]
CONSTANT_Integer_info 3 整型字面量 tag[u1]-bytes[u4]
CONSTANT_Float_info 4 浮点型字面量 tag[u1]-bytes[u4]
CONSTANT_Long_info 5 长整形字面量 tag[u1]-bytes[u8]
CONSTANT_Double_info 6 双精度浮点型字面量 tag[u1]-bytes[u8]
CONSTANT_Class_info 7 类或接口的符号引用 tag[u1]-index[u2]
CONSTANT_String_info 8 字符串类型字面量 tag[u1]-index[u2]
CONSTANT_Fieldref_info 9 字段的符号引用 tag[u1]-index[u2]-index[u2]
CONSTANT_Methodref_info 10 类种方法的符号引用 tag[u1]-index[u2]-index[u2]
CONSTANT_InterfaceMethodref_info 11 接口种方法的符号引用 tag[u1]-index[u2]-index[u2]
CONSTANT_NameAndType_info 12 字段或方法的部分符号引用 tag[u1]-index[u2]-index[u2]
CONSTANT_MethodHandle_info 15 表示方法句柄 tag[u1]-reference_kind[u1]-reference_index[u2]
CONSTANT_MethodType_info 16 标识方法类型 tag[u1]-descriptor_index[u2]
CONSTANT_InvokeDynamic_info 18 表示一个动态方法调用点 tag[u1]-bootstrap_method_attr_index[u2]-name_and_type_index[u2]

访问标志

标志名称 标志值 含义
ACC_PUBLIC 0x0001 是否为public类型
ACC_FINAL 0x0010 是否声明为final,只有类可设置
ACC_SUPER 0x0020 是否允许使用invokespecial字节码指令的新语意
ACC_INTERFACE 0x0200 标识是否为一个接口
ACC_ABSTRACT 0x0400 是否为abstract类型,接口或抽象类为真
ACC_SYNTHETIC 0x1000 标识这个类并非由用户代码产生
ACC_ANNOTATION 0x2000 标识这是一个注解
ACC_ENUM 0x4000 标识这是一个枚举

字段表集合

类型 名称 数量
u2 access_flags 1
u2 name_index 1
u2 descriptor_index 1
u2 attributes_count 1
attribute_info attributes attributes_count-1
字段访问标识
标识名称 标志值 含义
ACC_PUBLIC 0x0001 字段是否为public
ACC_PRIVATE 0x0002 字段是否private
ACC_PROTECTED 0x0004 字段是否protected
ACC_STATIC 0x0008 字段是否static
ACC_FINAL 0x0010 字段是否final
ACC_VOLATILE 0x0040 字段是否volatile
ACC_TRANSIENT 0x0080 字段是否transient
ACC_SYNTHETIC 0x1000 字段是否由编译器产生的
ACC_ENUM 0x4000 字段是否enum
  • 跟随access_flags标识的两项索引值:name_index和descriptor_index是对常量池引用,分别代表字段简单名称以及字段和方法的描述符

方法表集合

类型 名称 数量
u2 access_flags 1
u2 name_index 1
u2 descriptor_index 1
u2 attributes_count 1
attribute_info attributes attributes_count
方法访问标志
标志名称 标志值 含义
ACC_PUBLIC 0x0001 方法是否为public
ACC_PRIVATE 0x0002 方法是否为private
ACC_PROTECTED 0x0004 方法是否为protected
ACC_STATIC 0x0008 方法是否为static
ACC_FINAL 0x0010 方法是否为final
ACC_SYNCHRONIZED 0x0020 方法是否为synchonized
ACC_BRIDGE 0x0040 方法是否由编译器产生的桥接方法
ACC_VARAGRS 0x0080 方法是否接受补丁参数
ACC_NATIVE 0x0100 方法是否为native
ACC_ABSTRACT 0x0400 方法是否为abstract
ACC_STRICTFP 0x0800 方法是否为strictfp
ACC_SYNTHETIC 0x1000 方法是否由编译器自动产生

属性表集合

属性名称 使用位置 含义
Code 方法表 java代码编译成的字节码指令
ConstantValue 字段表 final关键字定义的常量值
Deprecated 类、方法表、字段表 被声明为deprecated的方法和字段
Exception 方法表 方法抛出的异常
EnclosingMethod 类文件 仅当一个类为局部类或者匿名类时才能拥有这个属性,这个属性用于标识这个类所在的外围方法
InnerClasses 类文件 内部类列表
LineNumberTable Code属性 源码行号与字节码指令的对应关系
LocalVariableTable Code属性 方法的局部变量描述
StackMapTable Code属性 1.6新增,类型检查验证器检查
Signature 类、方法表、字段表 1.5新增,泛型签名
SourceFile 类文件 记录源文件名称
SourceDebugExtension 类文件 1.6新增,存储调试信息
Synthetic 类、方法表、字段表 标识方法或字段为编译器自动生成
LocalVariableTypeTable 1.5新增、特征签名代替描述符
RuntimeVisibleAnnotation 类、方法表、字段表 1.5新增、动态注解支持,运行时可见
RuntimeInvisibleAnnotation 类、方法表、字段表 1.5新增、动态注解运行时不可见
RuntimeVisibleParameterAnnotations 方法表 1.5新增,作用对象为方法参数
RuntimeInvisibleParameterAnnotation 方法表 1.5新增,作用对象为方法参数
AnnotationDefault 方法表 1.5新增,记录注解类元素默认值
BootstrapMethods 类文件 1.7新增,保存invokedynamic指令引用的引导方法限定符
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352