[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:
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:
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:
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
Problème avec throws et throw
MERCI INFINIMENT CINCINNATUS !!
CA MARCHE !!
Citation:
Envoyé par
Cincinnatus
Un caractère mal placé et tout est H.S. :
lignes 25 et 26 :
Code:
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.
Problème avec throws et throw
Merci pour ces rappels professeur shadoko. C'est toujours utile !!
Citation:
Envoyé par
professeur shadoko
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 :D