IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

try catch finally


Sujet :

avec Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 133
    Par défaut try catch finally
    Salut à tous! que pensez vous de tout ça?

    J'ai remarqué une chose.Quand je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    :
     
    class A
    {methodeRisquer() throws MauvaiseException
    try{ System.out.println("on est dans try");
    objet.methodeRisquer();
    } catch(MauvaiseException e)
    {System.out.println("erreur");
    }
    finally{System.out.println("bebe");
    }
    System.out.println("toto");
    }
    je remarque donc que la methode methodeRisquer()
    s'execute jusqu'au bout c'est - a dire jusqu'a afficher toto

    par contre quand je fais try sans catch la methode ne va pas jusqu'au bout c'est - a dire que toot n'est pas affiché

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    :
    class A
    {methodeRisquer() throws MauvaiseException
    try{ System.out.println("on est dans try");
    objet.methodeRisquer();
    }  finally{System.out.println("bebe");
    }
    System.out.println("toto");
    }
    et quand je fais try catch et finally mais en relancant l'exception dans try , la methode n'arrive pas jusqu'au bout c'est à dire que toto n'est pas affiché

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class A
    {methodeRisquer() throws MauvaiseException
    try{ System.out.println("on est dans try");
    objet.methodeRisquer();
    } catch(MauvaiseException e)
    {System.out.println("erreur");
    throw e;
    }
    finally{System.out.println("bebe");
    }
    System.out.println("toto");
    }

  2. #2
    Membre éclairé Avatar de mouss4rs
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 884
    Par défaut
    Salut,

    finally te permet de gérer toi même l'erreur.
    Donc si tu met:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    finally{
    System.out.println("bebe");
    }
    Il est normal que cela n'affiche pas toto.
    Pour que toto s'affiche, il faudrait faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    finally{
    System.out.println("bebe");
    System.out.println("toto");
    }

  3. #3
    Membre émérite Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Par défaut
    Je comprends ca comme ca:

    Dans les cas 2 et 3 l'exception n'est pas catchée (ou alors catcher puis relancer ce qui revient un peu au même). Le finally est executé puis l'exception est lancé.

    Dans le cas 1, l'exception est traitée et ton programme peut continuer.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 133
    Par défaut
    Oui Heimdal tu as bien compris ma question!!!! qu'est ce que vous en pensez?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 133
    Par défaut
    J'essaie de poser ma question autrement:
    quand je mets try/catch/finally la methode va jusqu'au bout jusqu'à afficher toto, mais quand je mets juste try/finally la methode ne va pas jusqu'au bout c'est à dire n'affiche pas toto.De même quand je relance l'exception dans catch en faisant try/catch/finally, la methode ne va pas jusqu'au bout c'est à dire n'affcihe pas toto.
    Voir codes ci-dessus.
    Qu'en pensez-vous?
    Ou si vous avez un cours sur cela, merci de me le donner.

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Ben c'est normal que tu affiches "toto" dans le cas try catch finally et pas avec try finally.
    Un bloc try catch permet de protéger le code d'une exception.
    Lorsque celle-ci intervient, tu te débranches dans catch mais ensuite, tu exécutes tout le code qui suit le bloc protégé.
    La clause finally est là uniquement pour t'assurer que quoi qu'il arrive (exception non prévue), tu passeras par finally.

    Dans le cas try finally, comme tu n'as pas de clause catch, à la moindre erreur tu "dégages" (de la méthode ici) MAIS, comme tu as une clause finally, il fait le code de la clause...

    Plus clair ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 247
    Par défaut
    Principe de fonctionnement d'un try catch finally :

    Quoi qu'il arrive, erreur ou pas, une clause finally, si elle est présente sera toujours executée à la sortie du bloc.

    Si une erreur intervient dans la partie Try, et uniquement dans ce cas là, la clause Catch sera executée si elle est présente.
    Si elle n'est pas présente l'exception sera remontée à la première clause Catch parente rencontrée (dans une procédure appelante par exemple) avec execution préalable des clauses finally rencontrées.
    Si aucune clause Catch ne peut traiter l'exception, celle-ci est remontée jusqu'au système qui va t'afficher la boite de dialogue classique.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 133
    Par défaut
    Merci obutterlin, c'est beaucoup clair tes explications! merci aussi à tout le monde!!!

Discussions similaires

  1. Try Catch Finally et Return
    Par melleb dans le forum C#
    Réponses: 21
    Dernier message: 28/07/2011, 12h30
  2. Try catch finally, flux best practice
    Par LittleBean dans le forum Langage
    Réponses: 4
    Dernier message: 13/08/2009, 13h45
  3. Interrogation sur : Try.Catch.Finally
    Par Seth77 dans le forum C#
    Réponses: 7
    Dernier message: 16/09/2008, 11h22
  4. Réponses: 3
    Dernier message: 12/12/2006, 18h58
  5. Réponses: 13
    Dernier message: 03/08/2006, 16h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo