Java虚拟机(JVM) 07.类文件结构(.class文件结构)

在编写好了程序之后,就会出现一个.java结尾的文件,这个是源文件。
而后Java编译器(Javac)编译这个源文件后,生成一个.class文件。这个是类文件。Java的口号是“一次编写,到处运行”,这个是通过JVM来完成的。JVM与.java文件关系不大,与.class文件有着密切的关系。
这个class是八位字节为单位的二进制流,中间没有分隔符,内容按照位置放好,就好像计算机网络中的帧一样每个位置的数字都有自己的意义。

01.魔数 头四个字节,表示这个class文件是不是JVM可以接收的class文件,Java的class文件魔数是0xCAFFBABE (咖啡宝贝),这代表是Java的class文件。

02.版本信息 从第五到第八个字节,第五第六个字节是次要版本,第七第八是主要版本。JDK1.1 主版本是45,从后依次加一。当前的JDK主版本是57。

03.常量池 常量池的结构和广义表(数据结构)很像,常量池开头是两个字节,表示常量池中的个数。后面就是常量池中的项,每项前面有一个字节表示相关项是什么类型的,共有十七种。每种的结构是不同的。

04.访问标志 访问标志包含两个字节,共有16位。只用了9位。用每位上的0或者1值来记录class的信息,比如是否是接口,修饰符是否为public。如果信息需要整合,使用|运算(按位进行或运算)。

05.类索引和接口 前两个字节表示this,类本身。后面俩个字节表示super,(这个是一个关键字,跟this不同),表示是父类。这两个项的值都指向常量池中的项。接口表,跟常量池结构相似。前面的两个字节表示接口的数量,后面的相关项表示接口的相关信息。

06.字段表 用于描述类或者接口中的变量信息。跟广义表结构相似。前两个字节表示字段表中的字段个数,后面的项表示字段。每个项的结构是一致的。项中前两个字节表示修饰符,后面四个字节,前二表示指向常量池中的相关变量的变量名,后面指向的常量池中的相关变量的方法和字段描述符(变量的数据类型,参数列表(数量,类型,顺序),返回值)

07.方法表 跟字段表中的结构几乎是一样的,用来描述类class文件中存储的方法。前二是class文件中方法的数量,后面的项,前二表示修饰符,三四表示指向的方法名,五六表示数据类型,参数的信息,返回值。

08.属性表集合 这个是字段表,方法表中都可以含有的。这个还没有学完,相关百度。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值