class文件结构

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同样有附加属性描述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值