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 :

[B]Problème avec throws et throw[/B]


Sujet :

avec Java

  1. #1
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2019
    Messages : 37
    Points : 40
    Points
    40
    Par défaut [B]Problème avec throws et throw[/B]
    Le but est de tester la gestion des exceptions personnalisées, avec les instructions throws et throw.

    Je vais vous présenter les différents codes simplifiés.

    Je ne comprends pas pourquoi ces erreurs citées plus loin. Peut-être que les différentes instructions ne sont pas à leur place. Je ne sais pas. Dans tous les cas merci de m’aider.

    Je crée une classe NombreHabitantException héritant de la classe Exception dont voici le code*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    package classe1*;
    public class NombreHabitantException extends Exception {
        public NombreHabitantException(){
            System.out.println("Vous essayez d'instancier une classe ville avec un nombre d'habitants négatif*!");
        }
    }
    J’ai aussi une classe Ville et dans son constructeur je rajoute une condition, qui si elle est remplie, lèvera une exception de type NombreHabitantException. Voici le code de cette classe Ville*:
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    public class Ville {
     
        String nomVille;
        String nomPays*;
        int nbreHabitants;
        char categorie;
     
        // Méthode String.toString()
        public String toString(){
         return "\t"+this.nomVille+" est une ville de "+this.nomPays + ", elle comporte : "+ this.nbreHabitants +
      " => elle est donc de catégorie : " + this.categorie;
          }
     
        // Constructeur par défaut 
        //************************
        public Ville(){
            System.out.println("Création d'une ville !");
            nomVille = "inconnu";        
            nomPays = "inconnu";
            nbreHabitants = 0;
            this.setCategorie()*;
        }    
        // Constructeur avec paramètres:
        //*****************************
        public Ville(String pNom, int pNbre, String pPays){
                throws NombreHabitantException
                   {
                if (pNbre < 0)
                    throw new NombreHabitantException();                     
                    nomVille = pNom;
                    nomPays = pPays;
                    nbreHabitants = pNbre;
                   this.setCategorie();
          	     }
        }   
        //**************ACCESSEURS (GETTEURS)*********
     
        // Retourne le nom de la ville :
        public String getNom() {
            return nomVille;
       }
     
        // Retourne le nom du pays :
        public String  getNomPays() {
           return nomPays;
        }
     
        // Retourne le nbre d'habitants :
        public int getNbreHabitants() {
            return nbreHabitants;
        }
     
         //**************MUTATEURS (SETTEURS)*********
     
        // Définit le nom de la ville :
            public void setNom(String pNom) {
            nomVille = pNom;
        }
     
        // Défionit le nom du pays :
           public void setNomPays(String pPays) {
              nomPays = pPays;
              }
     
        // Définit le nombre d'habitants :
          public void setNbreHabitants( int nbre) {
             nbreHabitants = nbre;
                this.setCategorie();
        }
     
        // Définit la catégorie de la ville :
        public void setCategorie() {
     
            int bornesSuperieures [] ={0,1000,10000,100000,
                500000,1000000,5000000,10000000};
            char categorie [] = {'?','A','B','C','D','E','F','G','H'};
     
            int i = 0;
            while (i<bornesSuperieures.length && this.nbreHabitants > bornesSuperieures[i])
                i ++;
     
            this.categorie = categorie[i];
        }
       }
    Trois erreurs dans ce code*:
    à la ligne 26: throws NombreHabitantException*:
    illegal start of expression
    è la ligne 29: throw new NombreHabitantException();
    must be caught or declared to be thrown
    à la ligne 39: public String getnom() {*
    illegal start of expression

    Voici maintenant le code de la classe main*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    package classe1;
     
    public class Classe1 {
     
        public static void main(String[] args) {  
       Ville v = null;
      try {
            v = new Ville ("Rennes",12000,"France");
            System.out.println(v.toString());
               }
            catch (NombreHabitantException e) {} 
           System.out.println(v.toString());
            }
    }
    Une erreur signalée*:
    à la ligne 11: catch (NombreHabitantException e) {}
    Exception NombreHabitantException is never thrown in body of corresponding by statement

  2. #2
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 679
    Points
    1 679
    Par défaut
    Un caractère mal placé et tout est H.S. :
    lignes 25 et 26 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        public Ville(String pNom, int pNbre, String pPays){     
        throws NombreHabitantException
    
    Cette simple accolade rend incorrecte la déclaration du throws, fait que le throw en 29 est considéré non déclaré et cause le problème du main.
    Comme en plus, ça change la structure des blocs, il y a en prime l'erreur sur la ligne 39 au niveau du getter.

  3. #3
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    détails:
    throw est une instruction (exécutée)
    throws une directive (prise en compte par le compilateur)

    ensuite: faire un println dans une exception est une hérésie qui conduit au bucher
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  4. #4
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2019
    Messages : 37
    Points : 40
    Points
    40
    Par défaut Problème avec throws et throw
    MERCI INFINIMENT CINCINNATUS !!
    CA MARCHE !!

    Citation Envoyé par Cincinnatus Voir le message
    Un caractère mal placé et tout est H.S. :
    lignes 25 et 26 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        public Ville(String pNom, int pNbre, String pPays){     
        throws NombreHabitantException
    
    Cette simple accolade rend incorrecte la déclaration du throws, fait que le throw en 29 est considéré non déclaré et cause le problème du main.
    Comme en plus, ça change la structure des blocs, il y a en prime l'erreur sur la ligne 39 au niveau du getter.

  5. #5
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2019
    Messages : 37
    Points : 40
    Points
    40
    Par défaut Problème avec throws et throw
    Merci pour ces rappels professeur shadoko. C'est toujours utile !!

    Citation Envoyé par professeur shadoko Voir le message
    détails:
    throw est une instruction (exécutée)
    throws une directive (prise en compte par le compilateur)

    ensuite: faire un println dans une exception est une hérésie qui conduit au bucher

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

Discussions similaires

  1. gestion d'erreur avec throw -> fatal error
    Par laurentSc dans le forum Langage
    Réponses: 2
    Dernier message: 01/08/2013, 19h54
  2. Méthode avec throws Exception
    Par Mister Nono dans le forum C#
    Réponses: 3
    Dernier message: 10/06/2012, 14h41
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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