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.

  • 相关阅读:
    HDU 3342 Legal or Not
    POJ 3723 Conscription
    HDU 1102 Constructing Roads
    题目1545:奇怪的连通图
    面向对象程序设计寒假作业2(实践题)
    面向对象程序设计寒假作业2(编程题1)
    面向对象程序设计寒假作业1
    面向对象程序设计寒假作业1(编程题)
    面向对象程序设计寒假作业1(实践题)
    面向对象程序设计寒假作业1(问答题)
  • 原文地址:https://www.cnblogs.com/lrh-xl/p/5339046.html
Copyright © 2011-2022 走看看