class类文件结构

.java文件,会被编译为可在虚拟机上运行的class文件。

class文件是一个以8位字节为基础的二进制数据流,当大数据超过八位时,就会被分为若干个八位字节的文件进行存储。

class文件内部紧密排列,无间隙存在。

class文件是一个类似于c语言存贮的伪结构体。伪结构体中仅仅只包括无符号数,以及表,解析都是以这两种数据类型为基础进行解析的。

无符号数为基本数据类型,以u1,u2,u4,u8来代替1,2,4,8的无符号数。

一,魔数与class版本

class文件的头四个数,被称之为魔数,该数字定义一个能被虚拟机接受的class文件。

class文件后,第5,6个字节为次版本号,7,8为主版本号。

版本号的最高级别代表着可以运行的class文件最高版本。所以它可以向下兼容低版本。

(但是笔者还是碰到了在1.8编译的文件可以在1.7运行这个问题,这个原因是因为,1.8可能编译的版本号低于1.7能运行的最高的版本号)

二,常量池

class文件中,跟在主版本号,和次版本号之后。

常量池入口会放置一个u2类型的数据,代表着常量池的容量,容量计数从1开始,而不是我们所熟知的从0开始。

常量中存在字面量,和符号引用常量

字面量包含字符串,final修饰的的常量

符号引用包括,类和接口的全限定名,字段的名称和描述符,方法的名称和描述符。

三,访问标志

常量池之后的两位为访问标志,标记是个类,还是接口,是public 还是abstract

四,父类索引,类索引,接口索引

都是一个u2类型的数据

五,字段表集合

用于描述接口或者类中声明的变量。包括类级变量或者实例级变量,但是不包括方法内部变量。

六,方法表集合

访问标志,名称索引,描述符索引,属性表集合

七,属性表集合

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值