000000 cafebabe
000004 0000
000006 0032
文件头
- u4
标识符(magic 魔数)表示该文件是标准的class文件,JVM通过这4个字节判断该文件是不是一个class文件
- u2
次要版本号
- u2
主要版本号 (0032—jdk1.5 || 0033—jdk1.6 || 0034—jdk1.7)
- u2
常量池
- u2
首先用两个字节表示常量数 如果是0028 则表示常量池中有27个常量。
索引值为1~27。第0项常量具有特殊意义,如果某些指向常量池索引值的数据在特定情况下需要表达“不引用任何一个常量池项目”的含义,这种情况可以将索引值置为0来表示。
- 常量
常量信息 具体表格见
http://blog.youkuaiyun.com/a19881029/article/details/16117251
类信息
- u2
访问控制描述
这两个字节只用了5个bit分别是第1,5,6,10,12个bit 分别表示控制符
第1个bit 1-public 0-private
第5个bit 1-final
第6个bit 1-继承了父类 默认集成Object
第10个bit 1-interface
第12个bit 1-abstract
- u2
类名称指向常量池数字索引,
- u2
父类常量池数字索引
- u2
实现接口类
Field和Methods定义
- u2
属性数量
- u2
方法数量
- u2
访问控制描述
第n位bit含义如下
1 public
2 private
3 protected
4 static
5 final
6 synchronized
7 volatile
8 transient
9 native
12 abstract
- u1
名称 指向常量池
- u1
类型描述 指向常量池
- u2
描述
- u4
方法代码长度
- u2
方法使用的最大栈的深度
- u2
本地常量的最大个数
以上两个定义在JVM加载这个类的字节码到内存的验证阶段做检查,如果发现超过了这两个值,JVM会拒绝加载这个类。
- un
表示这个方法中的代码对应的JVM指令
- u2
抛出异常数量
之后是代码属性描述,代码本身的一些额外信息,如用于调试的信息,行号,名称。。。。
类属性描述
与Field和Method一样,Class同样有附加属性描述。