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

  前面介绍了class文件,从头开始的魔数,次版本号,主版本号,常量池入口,常量池,访问标志.那么再接下来的就是用来确定这个类的继承关系的类索引,父类索引和接口索引集合这三项了.

  下面就来认识一下这三项内容.

  类索引(this_class)和父类索引(super_class)都是一个u2类型的数据,而接口索引集合(interfaces)是一组u2类型的数据的集合,class文件中由这三项数据来确定这个类的继承关系.

  类索引用于确定这个类的全限定名,父类索引用于确定这个类的父类的全限定名.接口索引集合用来描述这个类实现了哪些接口,这些被实现的接口按implements语句后的接口顺序从左到右排列在接口索引集合中.

  类索引,父类索引和接口都按顺序排列在访问标志之后,类索引和父类索引用两个u2类型的索引值表示,它们各自指向一个类型为CONSTANT_Class_info的类描述常量,通过CONCTANT_Class_info类型的常量中的索引值可以找到定义在CONSTANT_Class_info类型的常量中的全限定名字符串.

  对接口索引集合,入口的第一项u2类型的数据为接口计数器(interface_count)表示索引表的容量.如果该类没有实现任何接口,则该计数器值为0,后面接口的索引表不再占用任何字节.

下面我们继续前面分析的class文件,继续往下走,分析上面这三项内容:

class文件及分析:

  那么现在我们拿这几个值和我们介绍常量池的时候用javap工具分析的常量池的时候查看的常量池的内容,验证一下是否正确.

  

  因为0x00 03 和0x00 04十六进制对应与十进制的3和4,所以类索引和父类索引就对应第三和第四个常量池.从上图看第三和第四个常量池分别对应TestClass和Object两个类,再看一下源代码,就知道结果是正确的.(因为我的类名就是TestClass,没有显示继承任何类,就是默认继承了Object父类)

  源代码:

  

转载于:https://www.cnblogs.com/lrh-xl/p/5346516.html

JVM-class文件完全解析-类索引,父类索引和索引集合相关推荐

  1. INI文件快速解析java工具包

    FastIni 概述 相信大家都用过阿里的fastjson,它可以通过模板快速解析json字符串,也可以通过key快速获取json字符串中的值.通过模板类型快速解析json字符串是一个很好的想法,所以 ...

  2. Jvm之用java解析class文件

    前言: 身为一个java程序员,怎么能不了解JVM呢,倘若想学习JVM,那就又必须要了解Class文件,Class之于虚拟机,就如鱼之于水,虚拟机因为Class而有了生命.<深入理解java虚拟 ...

  3. JVM学习笔记(Ⅰ):Class类文件结构解析(带你读懂Java字节码,这一篇就够了)

    JVM学习笔记(Ⅰ):Class类文件结构解析,带你读懂Java字节码 前言:本文属于博主个人的学习笔记,博主也是小白.如果有不对的地方希望各位帮忙指出.本文主要还是我的学习总结,因为网上的一些知识分 ...

  4. jvm中篇-04-Javap指令解析class文件

    jvm中篇-04-Javap指令解析class文件 解析字节码的作用 javac -g 操作 javap 的具体用法 使用举例 小结 234-237 解析字节码的作用 通过反编译生成的字节码文件,我们 ...

  5. Class文件结构介绍[访问标志,类索引,父类索引,接口索引集合]

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

  6. 歌词文件lrc的解析类(目前在WINCE下使用)

    用到歌词显示就写了一个歌词解析类,与大家共同分享. 贴出头文件: /****************************************************************** ...

  7. dom4j工具类_基于DOM4J的XML文件解析类

    XML文件解析分四类方式:DOM解析:SAX解析:JDOM解析:DOM4J解析.其中前两种属于基础方法,是官方提供的平台无关的解析方式:后两种属于扩展方法,它们是在基础的方法上扩展出来的,只适用于ja ...

  8. 最全的基于c++的serialport.cpp与serialport.h类文件(解析版)

    最全的基于c++的serialport.cpp与serialport.h类文件(解析版) 备注 参考原文件为:serialport.cpp与serialport.h类文件源代码 作者:c344935 ...

  9. C#怎样解析.CSV文件同时把类转换成JSON

    1.首先需要引用 Newtonsoft.Json 目的是为了把对象类直接转换为JSON,返回到前台 using Newtonsoft.Json; 2.定义一个类,存储返回的值 public class ...

  10. 一个CUE文件解析类

    网络上的APE文件通常附带一个CUE文件,该文件包含了此CD碟片的作者,曲目等信息,要能支持对APE文件的选曲以及必要信息的显示,必须实现CUE文件的解析.这是实现初步功能的CUE文件解析类,还有待完 ...

最新文章

  1. python 一张图画多条线_Gnuplot.py在一张图上绘制多条线
  2. db2联邦数据库 linux,DB2创建联邦数据库
  3. 查找xml文件中某接点的值
  4. Objc基础学习记录5
  5. Perl 中级教程 第5章课后习题
  6. 送货只服京东“特快送”:航空快件可送达近300个城市
  7. 很多创业失败的负债者
  8. 【总结】大规模数据(300万条)测试时,需要注意的问题。
  9. 公司招聘asp.net 工程师
  10. 基于树莓派的车牌识别门禁系统(工作日记)
  11. wepe重装win10用U盘安装系统
  12. AI改变现代商业的25种方式
  13. 零基础学前端系列教程 | 和前端谈恋爱的第004天——打扮漂亮
  14. 教你分析快递揽收后,第二条物流是否超过12小时
  15. Tensorflow2训练Fer2013数据集
  16. 微信公众号文章爬取方法整理
  17. 心知天气API如何调用与json数据如何显示
  18. InfluxDB学习整理
  19. Unit Test Harness(用具)应该具备什么功能?
  20. linux emule 编译 wx-config --libs,如何编译 eMule v0.46b

热门文章

  1. Pandas系列(七)Pandas数据排序
  2. Nginx基础详细讲解
  3. Java多线程售票一张票多买问题
  4. SELinux 案例 1
  5. Linux下vi命令小结
  6. OSI七(八)层结构 TCP/IP 4层结构
  7. new对象时,类名后加括号与不加括号的区别
  8. C#属性(Attribute)用法实例解析
  9. javascript里new构造函数返回的值
  10. 爬虫学习(七)——使用代理服务器进行数据爬取