JVM Class 类文件结构 (系列号2)

Class 文件的基本介绍

class 文件是一组以8字节为基本单位的二进制流。各个数据按照顺序紧凑的排列在class文件之中。遇到大于8字节的数据会分成若干个8位数据。

下图就是class文件中的数据:

  •  魔数:类的识别号,就好比 文件的尾缀。但是这里是放在前面。
  • Class版本号:注意JDK可以向前兼容版本,但是无法向后兼容Class文件。
  • Class文件常量池入口:注意与运行时的常量池区分,class文件常量池是 class 文件的资源仓库。常量池中存放字面量和符号引用。字面量是指 表明为final的常量,字符串等接近Java语言层面的常量含义。 符号引用则是 类、接口、方法的全名。Class文件是编译后产生的,在没有被执行(加载)之前,类里面不会存在方法和方法里的变量。所以,虚拟机运行时,都是需要到class文件常量池中获得方法的符号引用,从而找到方法入口。
  • 访问标志:这个Class文件可被访问的信息,比方这个Class是类还是接口,是否 public 是否 Abstract 型、是否被声明为 final等。
  • 索引:类索引、父类索引、接口索引;类索引就是这个类的全名,父类索引是父类全名,接口索引指向这个类的接口。
  • 字段表集合:表示类级的成员变量的修饰信息,比如这个字段被什么所修饰(public final volidate)。需要注意的是这个字段表不会列出父类的字段。但是可能会有内部类的字段表。
  • 方法表集合:方法表的存在,使得虚拟机在查询调用方法的速度上快了不少;方法的访问标志、方法名称索引。方法重载在Java语言中依靠方法名和特征签名来确定,所以此情况下。仅仅返回值的不同也会进行方法重载。但是在class 文件中,在方法名和特征签名一致的情况下,返回值类型的不同也会造成方法的并存。而不会覆盖父类的方法。
  • 属性表集合:属性表很特殊,注意它是描述类的属性(下图一),有(code,ConstantVlaue......)这当中的一个,比如code就是一个属性表的表标题(下图二),表的内容又有很多属性描述。
可以作为属性表的属性名称
Code属性表

Class 文件就基本介绍完了,点个赞就是兄弟喔...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值