Pourquoi la piscine constante (en Java ClassFile) indexé de 1 (et non 0)? Qu'est-ce que l'entrée constant_pool [0] réservé?

Curieux apprenant:

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 à.

antimoine:

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 synchronizedblocs, 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

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=226823&siteId=1
conseillé
Classement