zoukankan      html  css  js  c++  java
  • JVM-class文件完全解析-访问标志

      访问标志

      在前面分析了 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.

  • 相关阅读:
    CheckedListBoxControl 实现复选框的单选与多选功能
    DEV控件中GridView中的复选框与CheckBox实现联动的全选功能
    pyhon3+phoenixdb访问phoenix
    greenplum 6.0 下gpbackup的编译与使用
    greenplum下schema的使用
    greenplum6.1 使用复制表
    python动态加载脚本
    将8进制数字(文件权限)转换为rwxrwxrwx格式字符显示
    python3 load data infile for mysql5.7
    编译mysql for Qt 5.13.0驱动
  • 原文地址:https://www.cnblogs.com/lrh-xl/p/5339046.html
Copyright © 2011-2022 走看看