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.
接下来继续把前面的例子往下分析:
源代码:
这个图中,继常量池后,又分析了访问标志.
分析中 0x00 01 和 0x00 20 是通过上面的访问标志表的到的,对应着ACC_PUBLIC和ACC_SUPER .由于只用这两个标志位为1,其他标志位为0,把各个标志为的值和标志本身的值相与之后,再做或计算,就可以计算出整个访问标志的值了.0x00 01 | 0x00 20 = 0x00 21.
JVM-class文件完全解析-访问标志的更多相关文章
- 《Java虚拟机原理图解》1.3、class文件中的访问标志、类索引、父类索引、接口索引集合
讲完了class文件中的常量池,我们就相当于克服了class文件中最麻烦的模块了.现在,我们来看一下class文件中紧接着常量池后面的几个东西:访问标志.类索引.父类索引.接口索引集合. 1. 访问标 ...
- class字节码结构(二)(访问标志、类索引、父类索引、接口索引集合)
<Java虚拟机原理图解>1.3.class文件中的访问标志.类索引.父类索引.接口索引集合 字节码总体结构: 访问标志(access_flags)能够表示什么? 访问标志(access_ ...
- Class类文件结构--访问标志
访问标志的位置:在常量池结束之后的两个字节(16位)表示访问标志access_flags. 访问标志的作用:用于标识类或者接口层次的访问信息:比如该Class是类还是接口,是否为public类型.是否 ...
- 【JVM虚拟机】(6)---深入理解Class中访问标志、类索引、父类索引、接口索引
JVM(6)访问标志,类索引 上一篇博客讲[JVM虚拟机](5)---深入理解JVM-Class中常量池 我们知道一个class文件正常可以分为7个部分: 魔数与class文件版本 常量池 访问标志 ...
- class文件访问标志
class文件中用两个字节共16位代表访问标志(access flags),用于表明该类或接口被访问时能提供的一些信息: 标志名称 标志值 含义 ACC_PUBLIC 0x00 01 是否为Publi ...
- JVM-class文件完全解析-属性表集合
属性表集合 在前面魔数,次版本号,主板本号,常量池入口,常量池,访问标志,类索引,父类索引,接口索引集合,字段表集合,方法表集合,那么接下来就是属性表集合了. 在class文件,字段表,方法表都可 ...
- JVM-class文件完全解析-字段表集合
字段表集合 这个class文件的解析,分析得有点太久了.前面介绍类魔数,次版本号,主板本号,常量池入口,常量池,访问标志,类索引,父类索引和接口索引集合.下面就应该到字段表集合了. 紧接着接口索引 ...
- Class文件内容解析
一.概述 任何一个Class文件都对应唯一一个类或接口的定义信息,但是不是所有的类或接口都得定义在文件中(它们也可以通过类加载器直接生成). Class文件是一组以8位字节为基础单位的二进制流,各个数 ...
- MyBatis源码分析(1)-MapConfig文件的解析
1.简述 MyBatis是一个优秀的轻ORM框架,由最初的iBatis演化而来,可以方便的完成sql语句的输入输出到java对象之间的相互映射,典型的MyBatis使用的方式如下: String re ...
随机推荐
- c#动态创建ODBC数据源
使用C#有两种方法可以动态的创建ODBC数据源,这里我用比较常用的SQL2000作为例子. 方法1:直接操作注册表,需要引用Microsoft.Win32命名空间 /// <summary> ...
- git tag之后如何修改
先 git clone 整个仓库,然后 git checkout tag_name 就可以取得 tag 对应的代码了. 但是这时候 git 可能会提示你当前处于一个“detached HEAD&quo ...
- PacBio软件总览 - 初级分析
PacBio® RS Software Overview PacBio运行的整个流程是什么?每一步都用到了什么软件? PacBio软件套件 RS Remote:Design runs remotely ...
- xocde 静态类库 相对路径 与 绝对路径
xocde 静态类库 相对路径 与 绝对路径 导入别人的 静态类库,通常我直接用鼠标把文件夹拉到了 xcode的项目里面: 这时,导入的静态类库路径变成了,绝对路径:如果你的项目,不换位置那么编译运行 ...
- Windows下DLL查找顺序
目录 第1章说明 2 1.1 查找顺序 2 1.1.1 检查DllCharacteristics字段 3 1.1.2 读取manifset资源 3 1.1.3 读取manifs ...
- OOAD与UML笔记
UML基础介绍 1.UML的定义 统一建模语言(UML)是一种图形化的语言,它可以帮助我们在OOAD过程中标识元素.构建模块.分析过程并可通过文档说明系统中的重要细节 2.OOAD OO ...
- bzoj题解汇总(1001-1016)
bzoj1001: 平面图网络流. 注意只有一行或者一列的情况. bzoj1002: 待定系数法求解递归式.或者用MatrixTree+行列式直接推导. 然后来个高精度. bzoj1003: dp+最 ...
- Log 日志级别
一直对于程序中的日志级别有点模糊,今天专门百度学习下.遂成此文: 日志记录器(Logger)是日志处理的核心组件.log4j具有5种正常级别(Level).: 1.static Le ...
- arcgis API for javascript 学习笔记
ArcGis Server地图是缓存的,意味着它有服务器管理员简历提示性能的一组预先渲染的切片.由于这个原因地图通过ArcGISTiledMapServiceLayer表示 如果地图服务没有一个可用的 ...
- ooize简介
在Hadoop中执行的任务有时候需要把多个Map/Reduce作业连接到一起,这样才能够达到目的.[1]在Hadoop生态圈中,有一种相对比较新的组件叫做Oozie[2],它让我们可以把多个Map/R ...