Class文件结构介绍[访问标志,类索引,父类索引,接口索引集合]
访问标志
在常量池结束后,紧接着的两个字节代表访问标志(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文件结构介绍[访问标志,类索引,父类索引,接口索引集合]相关推荐
- JVM虚拟机-Class文件之类索引、父类索引和接口索引集合
一.概述 前面介绍了class文件,包括魔数.次版本号.主版本号.常量池和访问标志.接下来的就是用于确定这个类的继承关系的类索引(this_class).父类索引(super_class)与接口索引集 ...
- springboot切面AOP拦截父类或接口中标记注解的方法
一.注解的继承性回顾 被@Inherited元注解标注的注解标注在类上的时候,子类可以继承父类上的注解. 注解未被@Inherited元注解标注的,该注解标注在类上时,子类不会继承父类上标注的注解. ...
- 【Java 虚拟机原理】Class 字节码二进制文件分析 三 ( 访问和修饰标志 | 类索引 | 父类索引 | 接口计数器 | 接口表 | 字段计数器 | 字段表 )
文章目录 前言 一.访问和修饰标志 二.类索引 三.父类索引 四.接口计数器 五.接口表 六.字段计数器 七.字段表 前言 上一篇博客 [Java 虚拟机原理]Class 字节码二进制文件分析 二 ( ...
- java类索引_《Java虚拟机原理图解》1.3、class文件中的访问标志、类索引、父类索引、接口索引集合...
讲完了class文件中的常量池,我们就相当于克服了class文件中最麻烦的模块了.现在,我们来看一下class文件中紧接着常量池后面的几个东西:访问标志.类索引.父类索引.接口索引集合. 1. 访问标 ...
- java虚拟机标志_《Java虚拟机原理图解》1.3、class文件中的访问标志、类索引、父类索引、接口索引集合...
讲完了class文件中的常量池,我们就相当于克服了class文件中最麻烦的模块了.现在,我们来看一下class文件中紧接着常量池后面的几个东西:访问标志.类索引.父类索引.接口索引集合. 1. 访问标 ...
- 65,访问标志与类索引及接口索引集合_v1
访问标志:常量池后的2个字节代表访问标志(access _flags),用于识别类或接口层次访问信息: 这个class 是类还是接口 是否定义为public 类型 是否定义为abstract类型 如类 ...
- 《Java虚拟机原理图解》1.3、class文件里的訪问标志、类索引、父类索引、接口索引集合...
讲完了class文件里的常量池,我们就相当于克服了class文件里最麻烦的模块了.如今,我们来看一下class文件里紧接着常量池后面的几个东西:訪问标志.类索引.父类索引.接口索引集合. 1. 訪问标 ...
- JVM---数据存储和访问(类文件结构)
一.类文件结构概述 计算机只识0和1 代码编译的结果从本地机器码到字节码是一个很重大意义的转变. 文件的数据项 把上面的文件数据项转化成图如下: 主次版本号 常量池: 包含两大类常量:字面量(Lite ...
- 14.VisualVM使用详解、15.VisualVM堆查看器使用的内存不足、19.class文件--文件结构--魔数、20.文件结构--常量池、21.文件结构访问标志(2个字节)、22.类加载机制概
14.VisualVM使用详解 15.VisualVM堆查看器使用的内存不足 16.性能调优概述 17.性能调优–案例1 18.性能调优-案例三 19.class文件–文件结构–魔数 20.文件结构– ...
最新文章
- EFQRCode:自动生成花式二维码
- pycharm中R工具包的安装
- 「天才少年」稚晖君调戏机械臂!加上AI视觉,2小时学会抓螺母
- Cacti+Nagios完全攻略(二)整合cacti与nagios安装部署
- thinkphp利用模型通用数据编辑添加和删除实例
- 第二十节:Scrapy爬虫框架之使用Pipeline存储
- 前端也能玩转机器学习?Google Brain 工程师来支招!
- Gremlin发布混沌工程实验平台免费版,开放了“故障即服务”功能
- 线性模型第3讲:Lasso方法
- 阿里 计算机底层架构原理 pdf,完美起航-震撼!8位阿里大牛编写的2500页计算机底层架构原理解析,香香香...
- 适用mac微信用户的免登陆多开防撤回插件-WeChatTweak
- EP100的局部地址、逻辑地址和全局地址
- The Innovation | 谁是蛋白质和核酸的失踪的“媒人”?
- Android内存分析工具
- 项目实战之电子商城数据库源码
- Unable to find gradle task to build
- java爬取斗鱼:与虎牙对比
- 用二分法定义平方根函数(Bisection method Square Root Python)
- matlab patch 六面体,《有限元基础教程》_【MATLAB算例】4.8.2(1) 基于8节点六面体单元的空间块体分析(Hexahedral3D8Node)...
- 云服务器接口文档 华为云,和云服务器对接的接口