访问标志

  在常量池结束后,紧接着的两个字节代表访问标志(access_flags),这个标志用于识别一些类或者接口层次的访问信息,包括:这个Class是类还是接口,是否定义为public类型,是否定义为abstract类型,如果是类的话是否被声明为final等,

标志名称 标志值 含义
ACC_PUBLIC 0x0001 是否为public类型
ACC_FINAL 0x0010 是否被声明为final,只有类可以设置
ACC_SUPER 0x0020 是否允许使用invokespecial字节码指令的新语意,invokespecial指令的语意在JDK1.0.2发生过改变,为了区别这条指令使用哪种语意,JDK1.0.2之后编译出来的类的这个标志必须为真
ACC_INTERFACE 0x0200 标识这是一个接口
ACC_ABSTRACT 0x0400 是否为abstract类型,对于接口或者抽象类,此标志为真,其它类型为假
ACC_SYNTHETIC 0x1000 标识这个类并非由用户代码生成
ACC_ANNOTATION 0x2000 标识这是一个注解
ACC_ENUM 0x4000 标识这是一个枚举

注意:access_flags中一共有16个标志位,此处只列举了其中8个。
定义此类:

public final  class Test2 {private static final String NAME="bobo";private int age = 18;public void fun1(){int b = 20;int c = 30;int d = b+c+age;System.out.println(d);}
}

访问标志对应的信息

  标识结果的值为0x0031,是多标识符组成,即由多个标识符的值累加得来。因为标识符对应的值的特殊性,值累加后的结果可以唯一定位由哪些标识符组成,常见的0x0021只有ACC_SUPER和ACC_PUBLIC的值累加才能得到,而上面的0x0031只有ACC_SUPER与ACC_FINAL与ACC_PUBLIC的值累加后得到。

类索引,父类索引与接口索引集合

  类索引(this_class)和父类索引(super_class)都是一个u2类型的数据,接口索引计数器也是一个u2类型的数据,接口索引集合则是一组u2类型的数据集合,Class文件中的这几项数据来确定这个类的继承关系

类索引

  确定当前类的全限定名

父类索引

  确定当前类的父类的全限定名。由于java单继承的原则,所以父类只可能有一个;由于Object是所有其他类的基类,所以除了Object类本身的super_class为0意外,其余的所有类的super_class都不为0.

接口索引集合

  按照当前类implements(或者当前接口extends)的接口顺序,从左往右排列在接口的索引集合中。

public final  class Test2 implements Serializable,Runnable{private static final String NAME="bobo";private int age = 18;public void fun1(){int b = 20;int c = 30;int d = b+c+age;System.out.println(d);}@Overridepublic void run() {// TODO Auto-generated method stub}
}

对应的接口索引:

小结:
  类索引的直接值,父类索引的直接值,接口索引集合中的索引的直接值,代表的是一个常量池中的索引值,该索引值对应为一个CONSTANT_Class_info , CONSTANT_Class_info 又指向CONSTANT_Utf8_info,CONSTANT_Utf8_info中存储着全限定名字符串信息。

参考《深入理解Java虚拟机》

Class文件结构介绍[访问标志,类索引,父类索引,接口索引集合]相关推荐

  1. JVM虚拟机-Class文件之类索引、父类索引和接口索引集合

    一.概述 前面介绍了class文件,包括魔数.次版本号.主版本号.常量池和访问标志.接下来的就是用于确定这个类的继承关系的类索引(this_class).父类索引(super_class)与接口索引集 ...

  2. springboot切面AOP拦截父类或接口中标记注解的方法

    一.注解的继承性回顾 被@Inherited元注解标注的注解标注在类上的时候,子类可以继承父类上的注解. 注解未被@Inherited元注解标注的,该注解标注在类上时,子类不会继承父类上标注的注解. ...

  3. 【Java 虚拟机原理】Class 字节码二进制文件分析 三 ( 访问和修饰标志 | 类索引 | 父类索引 | 接口计数器 | 接口表 | 字段计数器 | 字段表 )

    文章目录 前言 一.访问和修饰标志 二.类索引 三.父类索引 四.接口计数器 五.接口表 六.字段计数器 七.字段表 前言 上一篇博客 [Java 虚拟机原理]Class 字节码二进制文件分析 二 ( ...

  4. java类索引_《Java虚拟机原理图解》1.3、class文件中的访问标志、类索引、父类索引、接口索引集合...

    讲完了class文件中的常量池,我们就相当于克服了class文件中最麻烦的模块了.现在,我们来看一下class文件中紧接着常量池后面的几个东西:访问标志.类索引.父类索引.接口索引集合. 1. 访问标 ...

  5. java虚拟机标志_《Java虚拟机原理图解》1.3、class文件中的访问标志、类索引、父类索引、接口索引集合...

    讲完了class文件中的常量池,我们就相当于克服了class文件中最麻烦的模块了.现在,我们来看一下class文件中紧接着常量池后面的几个东西:访问标志.类索引.父类索引.接口索引集合. 1. 访问标 ...

  6. 65,访问标志与类索引及接口索引集合_v1

    访问标志:常量池后的2个字节代表访问标志(access _flags),用于识别类或接口层次访问信息: 这个class 是类还是接口 是否定义为public 类型 是否定义为abstract类型 如类 ...

  7. 《Java虚拟机原理图解》1.3、class文件里的訪问标志、类索引、父类索引、接口索引集合...

    讲完了class文件里的常量池,我们就相当于克服了class文件里最麻烦的模块了.如今,我们来看一下class文件里紧接着常量池后面的几个东西:訪问标志.类索引.父类索引.接口索引集合. 1. 訪问标 ...

  8. JVM---数据存储和访问(类文件结构)

    一.类文件结构概述 计算机只识0和1 代码编译的结果从本地机器码到字节码是一个很重大意义的转变. 文件的数据项 把上面的文件数据项转化成图如下: 主次版本号 常量池: 包含两大类常量:字面量(Lite ...

  9. 14.VisualVM使用详解、15.VisualVM堆查看器使用的内存不足、19.class文件--文件结构--魔数、20.文件结构--常量池、21.文件结构访问标志(2个字节)、22.类加载机制概

    14.VisualVM使用详解 15.VisualVM堆查看器使用的内存不足 16.性能调优概述 17.性能调优–案例1 18.性能调优-案例三 19.class文件–文件结构–魔数 20.文件结构– ...

最新文章

  1. EFQRCode:自动生成花式二维码
  2. pycharm中R工具包的安装
  3. 「天才少年」稚晖君调戏机械臂!加上AI视觉,2小时学会抓螺母
  4. Cacti+Nagios完全攻略(二)整合cacti与nagios安装部署
  5. thinkphp利用模型通用数据编辑添加和删除实例
  6. 第二十节:Scrapy爬虫框架之使用Pipeline存储
  7. 前端也能玩转机器学习?Google Brain 工程师来支招!
  8. Gremlin发布混沌工程实验平台免费版,开放了“故障即服务”功能
  9. 线性模型第3讲:Lasso方法
  10. 阿里 计算机底层架构原理 pdf,完美起航-震撼!8位阿里大牛编写的2500页计算机底层架构原理解析,香香香...
  11. 适用mac微信用户的免登陆多开防撤回插件-WeChatTweak
  12. EP100的局部地址、逻辑地址和全局地址
  13. The Innovation | 谁是蛋白质和核酸的失踪的“媒人”?
  14. Android内存分析工具
  15. 项目实战之电子商城数据库源码
  16. Unable to find gradle task to build
  17. java爬取斗鱼:与虎牙对比
  18. 用二分法定义平方根函数(Bisection method Square Root Python)
  19. matlab patch 六面体,《有限元基础教程》_【MATLAB算例】4.8.2(1) 基于8节点六面体单元的空间块体分析(Hexahedral3D8Node)...
  20. 云服务器接口文档 华为云,和云服务器对接的接口

热门文章

  1. 使用pip install安装自定义工具包(PyPI平台)
  2. 淘宝爬虫(需要人工扫码一下)
  3. VC操作Excel之sercies、Trendline
  4. 番茄(Tomato),别名西红柿
  5. PHP封装curd,ThinkPHP5.0的模型CURD创建Create操作
  6. 网络工程与组网技术——第二讲
  7. JavaWeb详解加实战
  8. 深度学习:神经网络中的激活函数
  9. netHunter Bluetooth Arsenal(蓝牙攻武器库)
  10. 字节跳动技术新人培训全记录:校招萌新成长指南