JVM虚拟机中Class文件的类索引、父类索引和接口索引集合是什么

本篇文章为大家展示了JVM虚拟机中Class文件的类索引、父类索引和接口索引集合是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

创新互联公司2013年成立,先为皋兰等服务建站,皋兰等地企业,进行企业商务咨询服务。为皋兰企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

一、概述

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

类索引、父类索引和接口索引集合都按顺序排列在访问标志之后,类索引用于确定这个类的全限定名,父类索引用于确定这个类的父类的全限定名。由于Java语言不允许多继承,因此父类索引只有一个,除了java.lang.Object之外,所有的Java类都有父类,因此除了Object外,所有Java类的父类索引都不为0。

二、详细描述

类索引和父类索引均是u2类型的数据,它们各自指向一个类型为CONSTANTClassinfo类型的常量,通过CONSTANTClassinfo类型的常量中的索引值可以找到定义在CONSTATNUtf8info类型的常量中的全限定名字符串。

接口索引集合用来描述这个类实现了哪些接口,它是一组u2类型的数据的集合,集合中的第一项是接口计数器,表示索引表的容量。如果一个类没有实现任何接口,则该计数器值为0。

索引位置参见下图:

JVM虚拟机中Class文件的类索引、父类索引和接口索引集合是什么

三、案例分析

新建接口:

public interface HelloWord {}

JVM虚拟机中Class文件的类索引、父类索引和接口索引集合是什么

这里类索引值是0x0001,也就是指向常量池中的第一项,通过查找常量池可知这个类的全限定名是com/csdn/reader/HelloWord。

JVM虚拟机中Class文件的类索引、父类索引和接口索引集合是什么

类索引后的两个字节就是父类索引,同上可查找到父类索引为0x0002,对应于常量池中的第二项:

JVM虚拟机中Class文件的类索引、父类索引和接口索引集合是什么

JVM虚拟机中Class文件的类索引、父类索引和接口索引集合是什么

由于类实现的接口数目不确定,所以接口索引集合的描述的前部分叫做接口计数器(interfaces_count),接口计数器占用两个字节,其中的值表示着这个类实现了多少个接口,紧跟着接口计数器的部分就是接口索引部分了,每一个接口索引占有两个字节,接口计数器的值代表着后面跟着的接口索引的个数。

com.csdn.reader.HelloWord类没有实现任何接口,接口索引值为0。

JVM虚拟机中Class文件的类索引、父类索引和接口索引集合是什么

来个复杂一点的:

public interface HelloWord extends StringBuilderFormattable, Serializable {}

JVM虚拟机中Class文件的类索引、父类索引和接口索引集合是什么

通过javap来进行分析:

JVM虚拟机中Class文件的类索引、父类索引和接口索引集合是什么

上述内容就是JVM虚拟机中Class文件的类索引、父类索引和接口索引集合是什么,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。


网站名称:JVM虚拟机中Class文件的类索引、父类索引和接口索引集合是什么
网站路径:http://pwwzsj.com/article/jhjjhe.html