温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2022-01-04 09:27:46 来源:亿速云 阅读:162 作者:柒染 栏目:大数据

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

一、概述

前面介绍了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文件的类索引、父类索引和接口索引集合是什么,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI