gpt4 book ai didi

java - 为什么常量池(在 Java 类文件中)从 1(而不是 0)开始索引?保留的常量池[0]条目是做什么用的?

转载 作者:搜寻专家 更新时间:2023-11-01 01:48:48 24 4
gpt4 key购买 nike

根据 JVM 规范(Chapter 4.1“类文件结构”),声明“常量池表的索引从 1 到常量池计数 - 1”。

我很好奇为什么他们要跳过 [0] 以及保留此条目的目的。

最佳答案

他们跳过索引 0,以便它可以用于您通常引用常量池条目但想要指示“无”的情况。它是相当于空指针的常量池。

索引 0 最显着的用途是“捕获所有”异常处理程序。异常处理程序可以指向它要处理的异常类的常量池条目,或者只使用索引 0 来捕获所有内容(这等同于捕获 java/lang/Throwable)。实际上,编译器将生成捕获所有异常处理程序以实现 finallysynchronized block 和 try with resources 的清理部分,等等。

索引 0 的其他用途包括:

  • java/lang/Object的父类(super class)
  • 没有名字的参数名
  • 不属于另一个类的类的外部类(即顶级类、本地类和匿名类)
  • 匿名类的内部名称
  • 未立即包含在方法中的类的封闭方法
  • 没有版本信息的模块的版本信息
  • 没有依赖信息的模块的依赖

关于java - 为什么常量池(在 Java 类文件中)从 1(而不是 0)开始索引?保留的常量池[0]条目是做什么用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56808432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com