Maison  >  Article  >  Java  >  Comment un bloc Enfin affecte-t-il la valeur de retour d'une méthode en Java ?

Comment un bloc Enfin affecte-t-il la valeur de retour d'une méthode en Java ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-09 15:15:02347parcourir

How Does a Finally Block Affect the Return Value of a Method in Java?

Impact du bloc Final sur la valeur de retour

En Java, le comportement d'un bloc final sur la valeur de retour d'une méthode peut être contre-intuitif . Analysons un extrait de code et explorons les raisons sous-jacentes de ce phénomène.

Considérez 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());
    }
}

Une fois exécuté, le code imprime "Entrée dans le bloc final" mais renvoie " développeur." En effet, la valeur de retour est déterminée par l'exécution de l'instruction return dans le bloc try. La modification apportée à 's' dans le bloc final se produit une fois le bloc try terminé et n'est donc pas reflétée dans la valeur de retour.

Il est important de noter que cela s'applique aux modifications de la valeur de 's'. lui-même, et non aux changements dans les références de l'objet. Si 's' était 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 du langage Java (JLS) décrit les règles détaillées pour cela. comportement à la section 14.20.2. Dans le cas d'une instruction try-finally, si le bloc try et le bloc final ont tous deux des instructions return, la valeur de retour du bloc final prévaut. En effet, l'exécution d'une instruction return est considérée comme une fin brutale du bloc.

Pour résumer, la valeur de retour d'une méthode est déterminée par l'instruction return dans le bloc try. Les modifications apportées à la variable dans un bloc final, que ce soit en valeur ou via une modification d'objet, n'affectent pas la valeur de retour à moins que le bloc final n'inclue également une instruction return.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn