De la machine virtuelle Java de ( Chapitre 4.1 « La structure ClassFile »), il est dit que « Le tableau de constant_pool est indexé de 1 à constant_pool_count - 1. »
Je suis curieux de savoir pourquoi ils sautent [0] et quelle est cette entrée réservée à.
Ils sautées l'index 0 pour qu'il puisse être utilisé pour les cas où vous auriez normalement faire référence à une entrée de la piscine constante, mais plutôt vouloir indiquer « rien ». Il est la piscine constante équivalent d'un pointeur NULL.
L'utilisation la plus notable pour l' indice 0 est pour « attraper » les gestionnaires d'exception. Un gestionnaire d'exception peut pointer soit vers l'entrée de la piscine constante pour la classe des exceptions qu'il veut gérer, ou de l' indice d'utilisation juste 0 à tout catch (ce qui équivaut à la capture java/lang/Throwable
). Dans la pratique, le compilateur génère tous les gestionnaires d'attraper exception à mettre en œuvre finally
, des synchronized
blocs, et les parties de nettoyage de l' essayer avec des ressources, entre autres.
D'autres utilisations pour l'index 0 comprennent:
- La superclasse
java/lang/Object
- Le nom d'un paramètre sans nom
- La classe externe pour les classes qui ne sont pas membre d'une autre classe (ie top classes de niveau, les classes locales, et les classes anonymes)
- Le nom intérieur des classes anonymes
- La méthode englobante pour les classes qui ne sont pas immédiatement enfermé dans une méthode
- Version info pour un module sans version info
- Dépendances pour un module sans information de dépendance