Académique Documents
Professionnel Documents
Culture Documents
package tn.iteam;
import tn.iteam.exceptions.ExceptionDemo;
Throwable
Exception Error
RuntimeException
Exception Error
ArithmeticException EOFException
AutresExceptionNonSurveillees AutresExceptionSurveillees
NullPointerException
ArithmeticException
IllegalArgumentException
IndexOutOfBoudsException
IllegalStateException
try
{
// quelques actions potentiellement risquées
}
catch(SomeException se)
{
// que faire si une exception de ce type survient
}
catch(Exception e)
{
// que faire si une exception d’un autre type survient
}
finally
{
// toujours faire ceci, quelle que soit l’exception
}
normale du programme
recherche un gestionnaire d'exception
package tn.iteam.exceptions;
package tn.iteam.exceptions;
Syntaxe
try{
Où TypeException1, TypeException2, ... ,
<blocs de code à protéger>
} TypeExceptionk sont des classes
catch(TypeException1 se)
d'exceptions obligatoirement toutes
{
// Traitement Exception 1 distinctes.
}
catch(TypeException2 e) Une seule clause catch (TypeException e )
{ {...} est exécutée celle qui correspond au
// Traitement Exception 2
bon type de l'objet d'exception instancié.
}
……………
catch(TypeExceptionk e)
{
// Traitement exception k
}
package tn.iteam.exceptions;
Exemple
Une méthode dans laquelle est levée une ou plusieurs exceptions supervisées doit
obligatoirement signaler au compilateur quelles sont les classes d'exceptions
qu'elle laisse se propager.
Java dispose d'un spécificateur pour ce signalement : le mot clef throws suivi de la
liste des noms des classes d'exceptions qui sont propagées
Signature générale d'une méthode propageant des exceptions vérifiées
(surveillées)
Exemple :
protected static void meth ( int x, char c )
throws IOException, ArithmeticException {
.....
}
Si une exception peut survenir, mais que la méthode n’est pas censée la
traiter elle-même, il faut en « lancer » une instance
Il faut préciser que la méthode peut lancer ces exceptions
ajouter une clause throws à la signature de la méthode
public void writeList() {
PrintWriter out = new PrintWriter(new FileWriter("OutFile.txt"));
for (int i = 0; i < vector.size(); i++)
out.println("Valeur = " + vector.elementAt(i));
}
Affiche le résultat
import java.util.Scanner;
Donner a:12
Donner b: 6
Resultat =2
Donner a=12.
Donner b=0.
Exception in thread "main" java.lang.ArithmeticException: / by zero
at App1.calcul(App1.java:4)
at App1.main(App1.java:11)
Dans java, pour traiter les exceptions, on doit utiliser le bloc try catch
de la manière suivante:
import java.util.Scanner; Scénario 1
public class App1 {
public static int calcul(int a,int b){ Donner a:12
int c=a/b; Donner b:6
return c; Resultat=2
}
public static void main(String[] args) {
Scanner clavier=new Scanner(System.in); Scénario 2
System.out.print("Donner a:");int a=clavier.nextInt();
Donner a:12
System.out.print("Donner b:");int b=clavier.nextInt();
int resultat=0;
Donner b:0
try{ Divisio par zero
resultat=calcul(a, b); Resultat=0
}catch (ArithmeticException e){
System.out.println("Division par zero");
}
System.out.println("Resultat="+resultat);
}
}
Exception Action1
Action2
Considérons le cas d’un compte qui est défini par un code et un solde et sur
lequel, on peut verser un montant, retirer un montant et consulter le solde.
package metier;
public class Compte {
private int code;
private float solde;
public void verser(float mt){
solde=solde+mt;
}
public void retirer(float mt) throws Exception{
if(mt>solde) throw new Exception("Solde Insuffisant");
solde=solde-mt;
}
public float getSolde(){
return solde;
}
}
Deux solutions :
Soit utiliser le bloc try catch
try {
cp.retirer(mt2);
} catch (Exception e) {
System.out.println(e.getMessage());
}
Ou déclarer que cette exception est ignorée dans la méthode main et dans ce
cas là, elle remonte vers le niveau supérieur. Dans notre cas la JVM.
package metier;
public class Compte {
private int code;
private float solde;
public void verser(float mt){
solde=solde+mt;
}
public void retirer(float mt){
if(mt>solde) throw new RuntimeException("Solde Insuffisant");
solde=solde-mt;
}
public float getSolde(){
return solde;
}
}
package metier;
public class Compte {
private int code;
private float solde;
public void verser(float mt){
solde=solde+mt;
}
public void retirer(float mt) throws SoldeInsuffisantException{
if(mt>solde) throw new SoldeInsuffisantException("Solde Insuffisant");
solde=solde-mt;
}
public float getSolde(){
return solde;
}
}
System.out.println("Solde Final="+cp.getSolde());
}
}
System.out.println("Solde Actuel:"+cp.getSolde());
System.out.print("Montant à retirer:"); Scénario 3
double mt2=clavier.nextDouble();
Montant à verser: gdfhgddghgdh
cp.retirer(mt2);
} Problème de saisie
catch (SoldeInsuffisantException e) { Solde Final=0.0
System.out.println(e.getMessage());
}
catch (InputMismatchException e) {
System.out.println("Problème de saisie");
}
System.out.println("Solde Final= :"+cp.getSolde());}
}
catch (MontantNegatifException e) { Scénario 4
System.out.println(e.getMessage()); Montant à verser:azerty
} Problème de saisie
} Solde Final=0.0
Person
+ final MALE: String
+ final FEMALE: String
- name: String
Exception - gender: String
- age: int
+ Person(…)
+ Setters et Getters
TooYoungException TooOldExcption
AgeUtils
+ checkAge(age: int):
TooYoungException TooOldExcption
AgeUtils
+ checkAge(age: int):
AgeUtils.checkAge(age);
System.out.println("You pass!");
TooYoungException TooOldExcption
AgeUtils
+ checkAge(age: int):
package metier;
public class Person {
public static final String MALE = "male";
public static final String FEMALE = "female";
private String name;
private String gender;
private int age;
public Person(String name, String gender, int age) {
this.name = name;
this.gender = gender;
this.age = age;
}
// Setters et Getters
ValidateException
package exception;
public class ValidateException extends Exception {
// Emballer (wrap) Exception dans une autre Exception
public ValidateException(Exception e) {
super(e);
}
}
…..
}
}
}
Cours Java 2022 Hassen Lazrag