JVM学习笔记第五天,Class文件结构(二):常量池(下),访问标记

之前说到在常量池的表项数量之后就是常量池的实际内容,每一项以类型,长度,内容的顺序依次排列。下面介绍一下常量池表项的类型:

常量池中数据项类型类型标志
CONSTANT_Utf81
CONSTANT_Integer3
CONSTANT_Float4
CONSTANT_Long5
CONSTANT_Double6
CONSTANT_Class7
CONSTANT_String8
CONSTANT_Fieldref9
CONSTANT_Methodref10
CONSTANT_InterfaceMethodref11
CONSTANT_NameAndType12

根据这些常量池类型大体就知道代表着什么意思,这里就不再赘述了。
CONSTANT_Utf8的格式定义如下:

CONSTANT_Utf8_info{
	u1 tag;
	u2 length;
    u1 bytes[length];
}

tag代表着类型标志,根据上表可知这里的tag=1,length是字符串长度,再后来就是字符串的内容。在这里插入图片描述
如图所示,从第一行的0D列开始的是常量池中第二个表项,01代表它是一个UTF8的常量,0033代表该常量一共有51个字节,再往后数51个字节就是该常量的实际内容。第一行的0A到0D中的07代表着它是一个CONSTANT_Class常量,0002代表着它由常量池中第二个常量字符串指定。每个字节代表什么含义是由常量池类型规定的格式决定的,比如刚刚提到的这个CONSTANT_Class,它的格式(或说是结构)如下:

CONSTANT_Class_info{
	u1 tag;//无符号单字节的标记位,这里的值是07
	u2 name_index;//常量池的索引,即上文中的0002
}

其余的类型以此类推,可以通过书籍资料等自行分析。

Class的访问标记
访问标记位于常量池后,使用两个字节表示,表示该类的访问信息,如public,final等。下面是类Access Flag标记位和含义:
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值