web-dev-qa-db-fra.com

Java: le lancement d'une exception tue-t-il sa méthode?

Par exemple:

public String showMsg(String msg) throws Exception {
    if(msg == null) {
        throw new Exception("Message is null");
    }
    //Create message anyways and return it
    return "DEFAULT MESSAGE";
}

String msg = null;
try {
    msg = showMsg(null);
} catch (Exception e) {
    //I just want to ignore this right now.
}
System.out.println(msg); //Will this equal DEFAULT MESSAGE or null?

J'ai besoin d'ignorer essentiellement les exceptions dans certains cas (généralement lorsque plusieurs exceptions peuvent être levées à partir d'une méthode et qu'une n'a pas d'importance dans un cas particulier), donc malgré l'exemple pathétique que j'ai utilisé pour plus de simplicité, le retour dans showMsg continuera de s'exécuter ou le lancer renvoie-t-il réellement la méthode?

34
ryandlf

L'instruction return exécutera pas si l'exception est levée. Le lancement d'une exception entraîne le flux de contrôle de votre programme immédiatement vers le gestionnaire d'exception (*), ignorant tout le reste. Ainsi, en particulier, msg sera null dans votre instruction d'impression si une exception a été levée par showMsg.

(*) Sauf que les instructions dans les blocs finally s'exécuteront, mais ce n'est pas vraiment pertinent ici.

60
jacobm