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 :

illustration des exceptions personnalisés


Sujet :

avec Java

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 80
    Points : 53
    Points
    53
    Par défaut illustration des exceptions personnalisés
    Bonjour,
    Voulant illustrer le principe des exceptions personnalisé, je me permets d'écrire le code suivant qui fonctionne pas!
    En fait j'ai une class livre2 avec comme propriété titre et prix.
    je veux que si l'utilisateur entre un prix negatif une exceptions soit lévée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    class prixexceptions extends Exception {
    		public prixexceptions(){
    		 System.out.println("le prix doit pas etre negatif");
    		} 
    }	
    public class livre2{
    	private String titre;
    	private double prix;
     
    	public livre2(String untitre, double unprix) throws prixexceptions{ 
    			if(unprix<0){
    				throw prixexceptions();
    			} else {	
    			   this.titre=untitre;
    			   this.prix=unprix;
    			  }
    	}
    	public livre2(){
    	 this.titre="inconnu";
    	 this.prix=0;
    	} 
    	public String toString(){
    			String msg=" ";
    			msg+="Le titre:"+" "+this.titre+("\n"); 
    			msg+="Prix"+" "+this.prix;			
    			return msg;
    	}	
    	public static void main(String[] args){ 
    	livre2 l=null;
    	 try{
    	  l=new livre2("Booba",-200);
    	 } catch (prixexceptions e){
    	    l=new livre2();
    	   }
     
    	//livre l =new livre();
    	System.out.println(l.toString());
    		}
    }
    A la compilation j'ai deux erreurs que j'ai du mal à resoudre:
    erreur1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The serializable class prixexceptions does not declare a static final serialVersionUID field of type long
    A la ligne 4 dont voici le code dans mon éditeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	class prixexceptions extends Exception {
    erreur2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The method prixexceptions() is undefined for the type livre2
    a la ligne 14 dont voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	throw prixexceptions();
    Bien merci pour votre aide

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 77
    Points : 142
    Points
    142
    Par défaut
    Essayes plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    throw new prixexceptions();
    Edit: une meilleure facon de gérer une exception créé se trouve dans ce sujet:
    http://www.developpez.net/forums/d88...eer-exception/

  3. #3
    Membre éprouvé Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Points : 1 154
    Points
    1 154
    Par défaut
    Bonjour,

    Premièrement, ton exemple montre surtout l'importance de bien nommer ses classes:
    devrait etre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    throw new prixexceptions()
    Tu confonds une méthode prixexceptions() qui n'existe pas avec le constructeur de la classe prixexceptions.
    Je te conseille de renommer ta classe en PrixException (avec majuscules et sans "s").

    Deuxièmement, ce qui illustre bien les exceptions, ce serait plus de try/catcher ta fonction et de faire différents traitements en fonction de l'exception, du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public livre2(String untitre, double unprix){ 
    			try{
                                if(unprix<0){
    				throw new PrixException();
    			    } else {	
    			    this.titre=untitre;
    			    this.prix=unprix;
    			  }
                              catch(PrixException pe){
                                //Faire quelque chose
                              }
    	}
    Troisièmement, en général on n'imprime pas dans le code d'une exception. Une exception n'a de sens que si elle est "throwée". Le code de base est plutôt celui-la:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class prixexceptions extends Exception {
    		public prixexceptions(){
    		 super("le prix doit pas etre negatif");
    		} 
    }
    Enfin,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The serializable class prixexceptions does not declare a static final serialVersionUID field of type long
    Ceci est un warning, pas une erreur. Ca ne t'empeche pas de compiler mais te signale juste qu'un truc de ta classe n'est pas tip top. En l'occurence, toute classe doit déclarée une variable qui ressemble à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private static final long serialVersionUID = 1L;
    M'enfin ça c'est pas important... enfin je crois pas en fait je sais pas à quoi ça sert...
    Veuillez agréer nos sentiments les plus distingués. Soyez assurés de notre entière collaboration, bien à vous pour toujours et à jamais dans l'unique but de servir l'espérance de votre satisfaction, dis bonjour à ton père et à ta mère, bonne pétanque, mets ton écharpe fais froid dehors.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Mouais...


    Le traitement en fonction des exceptions, c'est bien, mais c'est plutôt si on a un réel besoin d'avoir un autre comportement lorsqu'on attrape l'exception.

    Dans ce cas-ci, c'était parfaitement correct (quoique j'aurais lancé une IllegalArgumentException plutôt qu'une PrixException).


    Le besoin de définir un serialVersionUID ne se rencontre que pour les classes implémentant java.io.Serializable et ce dans le but de voir si les deux versions d'une même classe sont compatibles. En gros, ce serialVersionUID doit être changé dès que la signature d'une variable d'instance est ajoutée, supprimée ou modifiée.

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 80
    Points : 53
    Points
    53
    Par défaut
    Bien merci
    le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    throw new prixexceptions()
    Après cette modif le code fonctionne sans avoir eu à mettre dans la classe prixexceptions au lieu de Encore une fois bien merci

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 77
    Points : 142
    Points
    142
    Par défaut
    Le super n'est pas là pour permettre la compilation du programme, mais pour une meilleure utilisation de l'exception. Avec un System.println.out, toute exception entraînera la même réponse, alors qu'un "super" permettra de rendre l'exception plus spécifique. Sur un petit programme ça peut paraître inutile, mais sur un gros c'est assez important.

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 245
    Points : 347
    Points
    347
    Par défaut
    Je rajouterai en plus que le System.out.println("") n'est pas terrible dans la mesure où si tu fais une application avec une interface graphique ton message ne s'affichera que dans une console (à condition que l'utilisateur ait lancé l'application dans la console). Donc en gros la seule chose que l'utilisateur verra c'est que le programme ne tourne pas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Codes d'erreurs des exceptions
    Par dway dans le forum Assembleur
    Réponses: 3
    Dernier message: 08/09/2004, 09h37
  2. [ORACLE 9i] Gestion des exceptions
    Par sygale dans le forum SQL
    Réponses: 6
    Dernier message: 19/08/2004, 15h06
  3. Gestion des exception (EOleException)
    Par shurized dans le forum Bases de données
    Réponses: 5
    Dernier message: 30/06/2004, 17h25
  4. [XMLRAD] gestion des exceptions
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 28/01/2003, 17h48
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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