Impact du bloc finalement sur la valeur de retour
dans java, le comportement d'un bloc finalement sur la valeur de retour d'une méthode peut être contre-intuitif . Analysons un extrait de code et plongeons dans les raisons sous-jacentes de ce phénomène.
Considérons le code suivant:
public class Test { private String s; public String foo() { try { s = "dev"; return s; } finally { s = "override variable s"; System.out.println("Entry in finally Block"); } } public static void main(String[] xyz) { Test obj = new Test(); System.out.println(obj.foo()); } }
Lorsqu'il est exécuté, le code imprime "l'entrée dans enfin block" mais renvoie "dev. En effet, la valeur de retour est déterminée par l'exécution de l'instruction de retour dans le bloc d'essai. La modification apportée en «s» dans le bloc final se produit une fois le bloc d'essai terminé et n'est donc pas reflété dans la valeur de retour.
Il est important de noter que cela s'applique aux modifications de la valeur de «S» lui-même, pas aux changements dans les références «s» de l'objet. Si les «s» étaient une référence à un objet mutable et que son contenu était modifié dans le bloc final, ces modifications seraient visibles dans la valeur de retour.
La spécification de la langue Java (JLS) décrit les règles détaillées pour cela Comportement dans la section 14.20.2. Dans le cas d'une instruction TRY-finalement, si le bloc d'essai et le bloc final ont des instructions de retour, la valeur de retour du bloc final prévaut. En effet, l'exécution d'une instruction de retour est considérée comme une fin abrupte du bloc.
pour résumer, la valeur de retour d'une méthode est déterminée par l'instruction de retour dans le bloc d'essai. Les modifications apportées à la variable dans un bloc finalement, que ce soit en valeur ou par modification d'objet, n'affecte pas la valeur de retour, sauf si le bloc final inclut également une instruction de retour.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3