java class类文件结构解析(2)访问标志,类索引,父类索引,接口索引集合

当常量池解析完成之后,随之而来的就是访问标志

访问标志用于标记当前类的类和接口层次的信息,用人话来说就是标记你这个类是个啥,是不是public修饰啊,是不是接口啊,是不是注解啊,下面是访问标志的表

标志名称标记含义
acc_public0x0001标记是否为public修饰
acc_final0x0010标记是否为final修饰
acc_super0x0020默认为真,为了区分该类是否为jdk1.02前的编译的类,兼容性处理
acc_interface0x0200标记是否为接口
acc_abstract0x0400标记是否为抽象类,注意,若类为接口此处也为真
acc_synthetic0x1000标记是否为用户代码产生
acc_annotation0x2000标记是否为注解
acc_enum0x4000标记是否为枚举

那么这到底是啥玩意呢,举个栗子

  • 假设我这个类是一个public修饰的抽象类,用jdk9编译的(以下默认为jdk9)
    那么这个类的标志位应该为
  • 0001(public修饰) + 0400(抽象类) + 0020(jdk1.02之后编译的类) = 0421
  • 同理,如果这个类是一个public,final修饰的普通类,那么这个类的标志位应该为
  • 0001(public修饰) + 0010(final修饰) + 0020(jdk1.02之后编译的类) = 0031

访问标志之后的6字节就是该类的类索引父类索引,接口索引集合

我的索引为00 03 00 04 00 00,分别对应类索引为常量池第3个值,父索引为常量池第4个值,没有接口索引集合,进入javap查看
在这里插入图片描述
显然,我这个类是一个继承自object的名叫testclass的类,加上上面的访问标志的信息(我的访问标记为21),可得这是一个继承自 object 叫 testclass 的 public 修饰的由jdk1.02之后的jdk编译的类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值