JVM-访问标志

Posted 小凉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM-访问标志相关的知识,希望对你有一定的参考价值。

  访问标志

  在前面分析了 class文件的魔数,次版本号,主版本号,常量池入口,常量池,那么在常量池结束后,紧接着的两个字节代表访问标志(access_flages).这个标志用于识别一些类或者接口层次的访问信息,包括:这个class是类还是接口,是否定义为public类型,是否定义为abstract类型,如果是类的话,否被声明为final等. 

  访问标志及其含义具体如下:

  

标志名称  标志值 含义
ACC_PUBLIC 0x00 01 是否为Public类型
ACC_FINAL 0x00 10 是否被声明为final,只有类可以设置
ACC_SUPER 0x00 20 是否允许使用invokespecial字节码指令的新语义.
ACC_INTERFACE 0x02 00 标志这是一个接口
ACC_ABSTRACT 0x04 00 是否为abstract类型,对于接口或者抽象类来说,次标志值为真,其他类型为假
ACC_SYNTHETIC 0x10 00 标志这个类并非由用户代码产生
ACC_ANNOTATION 0x20 00 标志这是一个注解
ACC_ENUM 0x40 00 标志这是一个枚举

 

  access_flages中共有两个字节(16位)可以使用,没有使用到的标志为要求一律为0.

接下来继续把前面的例子往下分析:

源代码:

技术分享  
class文件:

技术分享

  这个图中,继常量池后,又分析了访问标志.

  分析中 0x00 01 和 0x00 20 是通过上面的访问标志表的到的,对应着ACC_PUBLIC和ACC_SUPER .由于只用这两个标志位为1,其他标志位为0,把各个标志为的值和标志本身的值相与之后,再做或计算,就可以计算出整个访问标志的值了.0x00 01 | 0x00 20 = 0x00 21.

以上是关于JVM-访问标志的主要内容,如果未能解决你的问题,请参考以下文章

Jvm(36),class文件结构----访问标志

jvm原理(26)字节码访问标志与字段表详解

JVM14_Class文件结构细节魔数Class文件版本常量池访问标识(或标志)类索引|父类索引|接口索引集合字段|方法|属性表集合

[jvm解析系列][六]class里的常量池,访问标志,类的继承关系,如何把一个类在字节码中描述清楚?

Jvm(50),指令集----同步指令

JVM-class文件完全解析-方法表集合