De la JVM espec ( Capítulo 4.1 "La estructura de archivo de clase"), se afirma que "La tabla está indexada constant_pool de 1 a constant_pool_count - 1."
Tengo curiosidad por qué están faltando a [0] y cuál es esta entrada reservada para.
Dejaron el índice 0 para que pueda ser utilizado para los casos en que normalmente hacen referencia a un conjunto de constantes de entrada, sino que desea indicar "nada". Es el conjunto de constantes equivalente de un puntero nulo.
El uso más notable por el índice 0 es para "capturar" todos los controladores de excepciones. Un manejador de excepciones pueden indicar tanto a la entrada del grupo de constantes para la clase de excepciones que quiere manejar, o el índice solo uso 0 a detener todo (esto es equivalente a la captura java/lang/Throwable
). En la práctica, el compilador generará captura todos los controladores de excepciones para poner en práctica finally
, synchronized
bloques, y las porciones de limpieza de intentarlo con los recursos, entre otras cosas.
Otros usos para el índice 0 incluyen:
- La superclase de
java/lang/Object
- El nombre de un parámetro sin nombre
- La clase externa para clases que no son el miembro de otra clase (es decir, las clases de nivel superior, clases locales, y clases anónimas)
- El nombre interno de las clases anónimas
- El método que encierra para las clases que no están encerrados en un método de inmediato
- información de versión de un módulo con ninguna información de la versión
- Dependencias de un módulo con ninguna información de dependencia