JVM学习笔记第三天,Class文件结构(一):魔数,大小版本号,常量池(上)

Class文件的总体结构包括:魔数,小版本号,大版本号,常量池,访问标记(public,static等),当前类,类的属性、方法、字段,实现的接口,父类等。Class文件用一种类似于C语言结构体的方式进行描述,并且统一用无符号整数作为基本数据类型。由u1,u2,u4,u8,表示无符号的单字节,2字节,4字节和8字节,字符串则是一个使用u1的数组。
(1)文件以一个4字节的Magic开头,后面是大小两个版本号。
(2)在版本号后面是常量池,常量池的个数有constant_pool_count个,常量池的表项有constant_pool_count-1项。
(3)常量池之后是类的访问修饰符、代表自身类的引用,父类引用以及接口数量和实现的接口引用等等。

1.Magic(魔数)
魔数是Class文件的标志,是一个四字节的无符号整数,它的内容被固定为0xCAFEBABE,如果一个Class文件不以CAFEBABE开头,虚拟机在进行文件校验(文件校验后面会有提到)的时候就会报错。

2.Class文件的版本
小版本号出现在大版本号之前,每个版本号都占两个字节。
在这里插入图片描述
如下图所示,小版本号是0,大版本号是34(16进制),转换成10进制是52,查询上表得知编译器版本是1.8
在这里插入图片描述

3.常量池(上)
常量池对于Class文件中的字段和方法解析有至关重要的作用。它是整个Class文件的基石。在版本号之后紧接着就是常量池的数量。如上图所示0x15代表着Class文件中共有常量池表项15-1=14项。(常量池0为空缺项)。在数量之后就是常量池的实际内容,每一项以类型,长度,内容的格式存放依次排列。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值