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

Langage Java Discussion :

différence entre Throws et Throw [FAQ]


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 135
    Par défaut différence entre Throws et Throw
    Bonjour,

    j'aimerais savoir la différence entre Throws et throw.

    Aparremment throws se met a coté de la définition de la methode avec le nom de l'exception.

    et throw permet de lancer l'exception dans ce bloc.

    y-a t'il d'autres subtilités ? définitions ?

    Merci

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Non c'est ça.

    throw permet de lever une exception
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void method(int i) {
        if(i < 0) {
            throw new Exception("i doit être positif ou nul : " + i);
        }
    }
    cependant ce code ne compilera pas car Java impose de gérer les exceptions, il faut donc soit attraper l'exception (mais ici aucun intérêt puisqu'on veut la propager) soit indiquer explicitement que la méthode peut lever une exception.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void method(int i) throws Exception {
        if(i < 0) {
            throw new Exception("i doit être positif ou nul : " + i);
        }
    }
    Remarque : il y a une "exception" (c'est le cas de le dire ) à cette règle, les exceptions de type RuntimeException n'ont, elles, pas l'obligation d'être gérées (la plus connue est sans null doute la NullPointerException ).
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  3. #3
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    Salut,

    Pour faire clair, throws permet de dire à java que ta fonction / procédure va renvoyer une exception, alors que throw te permet de renvoyer une exception.

    En résumé :
    • throws : définition de renvoi
    • throw : renvoi en lui même


    Comme dit plus haut, ils ne peuvent être dissociés. Si tu mets un throws dans la définition d'une fonction / procédure, tu devras forcément avoir un throw ou un appel à une fonction renvoyant elle même une exception du même type que celle que tu renvoies

    Fred

  4. #4
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Citation Envoyé par mavina
    Si tu mets un throws dans la définition d'une fonction / procédure, tu devras forcément avoir un throw ou un appel à une fonction renvoyant elle même une exception du même type que celle que tu renvoies
    Non, ce n'est pas obligatoire. Le mot-clé throws indique la possibilité de levée d'exception, non une obligation. Ce code est valide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public void method() throws Exception {
    }

  5. #5
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    Au temps pour moi, j'ai jamais eu l'occasion d'utiliser throws sans renvoyer d'exception à vrai dire, je pensais vraiment que ce fut obligatoire

    Fred

  6. #6
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Citation Envoyé par mavina
    Au temps pour moi, j'ai jamais eu l'occasion d'utiliser throws sans renvoyer d'exception à vrai dire, je pensais vraiment que ce fut obligatoire

    Fred
    Cela peut servir de fixer la signature de la méthode avec une clause throws pour être ouvert à l'extension : en effet, en redéfinissant la méthode dans une classe fille, on n'a pas le droit de modifier la clause throws (on peut la restreindre mais pas l'étendre). Avec une méthode abstraite, cela est d'autant plus pertinent.

  7. #7
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    +1 je rajouterai que "throws" utilisé dans une interface limite les oublis de gestion de l'exception ( signature de la méthode lors d'une erreur de compile ).

Discussions similaires

  1. Différence entre un "bidouilleur" et un Pro ?
    Par christ_mallet dans le forum Débats sur le développement - Le Best Of
    Réponses: 290
    Dernier message: 28/11/2011, 10h53
  2. la différence entre @throws et @exception du JavaDoc
    Par aroussi_sanaa dans le forum Langage
    Réponses: 3
    Dernier message: 31/05/2009, 17h15
  3. Différence entre TCP, UDP, ICMP
    Par GliGli dans le forum Développement
    Réponses: 1
    Dernier message: 13/09/2002, 08h25
  4. Différences entre jmp, jz, jnz, etc
    Par christbilale dans le forum Assembleur
    Réponses: 3
    Dernier message: 05/07/2002, 15h09
  5. Réponses: 3
    Dernier message: 07/05/2002, 16h06

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