Java 为什么JVM类文件中的属性_name_index是索引?

Java 为什么JVM类文件中的属性_name_index是索引?,java,jvm,specifications,.class-file,Java,Jvm,Specifications,.class File,这一页说 对于所有属性,属性\名称\索引必须是类的常量池中的有效无符号16位索引 但是,我想知道这个字段是否直接代表它自己的类型,是否比当前的规范更好 (例如)如果属性\u name\u索引==0x01,则属性种类将固定为堆栈映射表,而不引用常量池 当前规范的优点是什么?Java属性可以有几乎任何字符串作为名称。这是一个可扩展的系统。JVM规范定义了几十个标准属性,但用户也可以定义自己的自定义属性(Scala使用这种能力来实现Scala特定的运行时功能) 为什么JVM类文件中的属性_name_i

这一页说

对于所有属性,属性\名称\索引必须是类的常量池中的有效无符号16位索引

但是,我想知道这个字段是否直接代表它自己的类型,是否比当前的规范更好

(例如)如果
属性\u name\u索引
==0x01,则属性种类将固定为
堆栈映射表
,而不引用常量池


当前规范的优点是什么?

Java属性可以有几乎任何字符串作为名称。这是一个可扩展的系统。JVM规范定义了几十个标准属性,但用户也可以定义自己的自定义属性(Scala使用这种能力来实现Scala特定的运行时功能)

为什么JVM类文件中的属性_name_index是索引

因为这是他们规定的。不管是好是坏

注意,最初的类文件格式是在20世纪90年代早期定义的,远远早于Java被称为Java;看

当前规范的优点是什么

  • 它是可扩展的

  • 它是紧凑的;e、 g.一个名称的常量池条目可以在类文件的多个位置引用

  • 这是一致的

  • 它是规定的,并且该规范被广泛采用/实施


但这一切都没有意义。。。除非您打算实现自己的新类文件格式。

规范就是规范。询问为什么是这样,或者为什么不是您认为应该是这样,基本上是徒劳的。我忍不住注意到,大金字塔是用石头建成的,花了50年才建成的。如果他们用钢不是更好吗?:-)