Imaginez un scénario dans lequel l'exécution d'une méthode traverse plusieurs instructions de retour dans un bloc try-finally. Une question naturelle se pose : quelle instruction return détermine en fin de compte la valeur de retour finale de la méthode ? Pour approfondir cette énigme, analysons un extrait de code spécifique :
String test() { try { return "1"; } finally { return "2"; } }
L'intrigue consiste à comprendre si la valeur de retour d'un appel à test() est cohérente sur toutes les machines virtuelles Java (JVM). La spécification du langage Java détient la clé de ce mystère.
Selon la spécification du langage Java, le retour du bloc final écrase le retour du bloc try. Ainsi, "2" est désigné sans équivoque comme la valeur de retour finale, quelle que soit la JVM utilisée.
Empiriquement, la JVM Sun adhère à cette spécification, rendant systématiquement "2" comme valeur de retour pour test(). Cependant, il est crucial de noter que cette conformité n'est pas simplement une bizarrerie spécifique à la JVM.
La spécification l'exige explicitement, et toute JVM qui s'en écarte est considérée comme non conforme. Par conséquent, il est prudent d'affirmer que la valeur de retour définitive sera toujours "2" dans toute JVM respectueuse des spécifications.
Bien que la spécification apporte des éclaircissements sur le comportement de la valeur de retour, il est fortement déconseillé d’utiliser plusieurs retours au sein d’une seule méthode. De telles pratiques de codage introduisent une confusion inutile et violent les principes fondamentaux de codage.
Les compilateurs émettent souvent des avertissements contre cette approche douteuse, comme en témoigne l'affirmation d'Eclipse selon laquelle le bloc de retour de test() ne s'exécutera jamais (à tort). Adoptez la sagesse de la spécification du langage et évitez ces abominations de codage.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!