Vous êtes sur la page 1sur 44

Les exceptions

Axel KAMALAK
Les exceptions
La notion d'exception est un mécanisme permettant au
développeur JAVA de traiter de manière efficace et simple le
problème de la gestion des erreurs lors de l'exécution d'un
programme.

Il s'agit d'un signal qui indique qu'un évènement anormal est


survenu dans un programme. La récupération de l'exception
permet au programme de s'exécuter.
Les exceptions

Différentes causes sont à l’origine de ce problème :

L’utilisateur
Les exceptions

Différentes causes sont à l’origine de ce problème :

L’utilisateur Le développeur
Les exceptions

Différentes causes sont à l’origine de ce problème :

L’utilisateur peut entrer des données


non autorisées.

Un chiffre au lieu d’un nombre, …


Les exceptions

Différentes causes sont à l’origine de ce problème :

Le développeur peut avoir oublié


de tester une condition
Les exceptions

Différentes causes sont à l’origine de ce problème :

Le développeur peut avoir oublié


de tester une condition
Les exceptions

Différentes causes sont à l’origine de ce problème :

Si le développeur écrit trop de test,


le code devient vite illisible.
Les exceptions

Différentes causes sont à l’origine de ce problème :

Si le développeur écrit trop de test,


le code devient vite illisible.

Pour répondre à ce besoin, le langage JAVA propose la gestion des


évènements.
Les exceptions
Soit le programme suivant :
package Exercice;

public class Exercice3 {

public static void main (String [] args)


{
int a = 5 ;
int b= 6 ;
int c =0 ;

int somme = a*b/c;

System.out.println(somme);

}}
Les exceptions
Soit le programme suivant :
package Exercice;

public class Exercice3 {

public static void main (String [] args)


{
int a = 5 ;
int b= 6 ;
int c =0 ;

int somme = a*b/c;

System.out.println(somme);

}}
Les exceptions
package Exercice;

public class Exercice3 {

public static void main (String [] args)


{
int a = 5 ;
int b= 6 ;
int c =0 ;

int somme = a*b/c;

System.out.println(somme);

}}
Les exceptions
package Exercice;

public class Exercice3 {

public static void main (String [] args)


{
int a = 5 ;
int b= 6 ;
int c =0 ; L’utilisateur peut entrer 0
int somme = a*b/c;

System.out.println(somme);

}}
Les exceptions
package Exercice;

public class Exercice3 {

public static void main (String [] args)


{
int a = 5 ;
int b= 6 ;
int c =0 ; Génération d’erreur
int somme = a*b/c;

System.out.println(somme);
Exception in thread "main" java.lang.ArithmeticException: / by zero
}} at Exercice.Exercice3.main(Exercice3.java:11)
Les exceptions
Nous pourrions résoudre ce problème à l’aide d’un
test if – else.
package Exercice;

public class Exercice3 {

public static void main (String [] args)


{
int a = 5 ; Il faudrait tester que la variable c
int b= 6 ; est différent de 0.
int c =0 ;

int somme = a*b/c;

System.out.println(somme);

}}
Les exceptions
Nous pourrions résoudre ce problème à l’aide d’un
test if – else.
package Exercice;

public class Exercice3 {

public static void main (String [] args)


{
int a = 5 ; Il faudrait tester que la variable c
int b= 6 ; est différent de 0.
int c =0 ;
if(c!=0)
{
int somme = a*b/c;
System.out.println(somme);
}

}}
Les exceptions
Nous pourrions résoudre ce problème à l’aide d’un
test if – else.
package Exercice;

public class Exercice3 {

public static void main (String [] args)


{
int a = 5 ; Ce qui risque d’ alourdir le code et
int b= 6 ; le code va vite devenir illisible.
int c =0 ;
if(c!=0)
{
int somme = a*b/c;
System.out.println(somme);
}

}}
Les exceptions
public class Exercice3 {
public static void main (String [] args)
{
int a = 5 ;
int b= 6 ;
int c = 0 ;

try{
int somme = a*b/c;

System.out.println(somme);
}
catch (ArithmeticException e)
{
System.out.println("Interdit de diviser par 0 !");

}
}
}
Les exceptions
public class Exercice3 {
public static void main (String [] args)
{
int a = 5 ;
int b= 6 ;
int c = 0 ;
Cette zone peut générer
try{ une erreur
int somme = a*b/c;

System.out.println(somme);
}
catch (ArithmeticException e)
{
System.out.println("Interdit de diviser par 0 !");

}
}
}
Les exceptions
public class Exercice3 {
public static void main (String [] args)
{
int a = 5 ;
int b= 6 ;
int c = 0 ;

try{
int somme = a*b/c;

System.out.println(somme);
}
catch (ArithmeticException e)
{
System.out.println("Interdit de diviser par 0 !");

}
}}
Les exceptions
public class Exercice3 {
public static void main (String [] args)
{
int a = 5 ;
int b= 6 ;
int c = 0 ;
On va mettre le code
try{
susceptible de générer une
int somme = a*b/c;
erreur entre le bloc « try »
System.out.println(somme);
}
catch (ArithmeticException e)
{
System.out.println("Interdit de diviser par 0 !");

}
}}
Les exceptions
public class Exercice3 {
public static void main (String [] args)
{
int a = 5 ;
int b= 6 ;
int c = 0 ;
Dans le cas d’une exception,
try{
l’action à réaliser dans le bloc
int somme = a*b/c;
« catch »
System.out.println(somme);
}
catch (ArithmeticException e)
{
System.out.println("Interdit de diviser par 0 !");

}
}}
Les exceptions
public class Exercice3 {
public static void main (String [] args)
{
int a = 5 ;
Il est possible de prévoir
int b= 6 ;
1 ou plusieurs types d’actions
int c = 0 ;
à réaliser.
try{
int somme = a*b/c;

System.out.println(somme);
}
catch (ArithmeticException e)
{
System.out.println("Interdit de diviser par 0 !");

}
}}
Les exceptions
Syntaxe JAVA

try
{
..
}
catch (ClasseException1 variable)
{

}
catch (ClasseException2 variable)
{

}
Les exceptions
Syntaxe JAVA

try
{
Partie de code susceptible de générer une erreur
}
catch (ClasseException1 variable)
{

}
catch (ClasseException2 variable)
{

}
Les exceptions
Syntaxe JAVA

try
{
Partie de code susceptible de générer une erreur
}
catch (ClasseException1 variable)
{
Action à réaliser si le cas appartient à ClasseException1
}
catch (ClasseException2 variable)
{

}
Les exceptions
Syntaxe JAVA

try
{
Partie de code susceptible de générer une erreur
}
catch (ClasseException1 variable)
{
Action à réaliser si le cas appartient à ClasseException1
}
catch (ClasseException2 variable)
{
Action à réaliser si le cas appartient à ClasseException2
}
Les exceptions
Le bloc finally

Un bloc finally permet au programmeur de définir un


ensemble d'instructions qui est toujours exécuté, que
l'exception soit levée ou non, capturée ou non.

La seule instruction qui peut faire qu'un bloc finally


ne soit pas exécuté est System.exit().
Les exceptions
package Exercice; try{
int somme = a*b/c;

public class Exercice3 { System.out.println(somme);


public static void main }
(String [] args) catch (ArithmeticException e)
{
{ System.out.println("Interdit de diviser par 0 !");
int a = 5 ;
int b= 6 ; }
finally
int c = 0 ; {
System.out.println("Bloc Finally!");
}
}
}

Le bloc finally sera exécuté à la fin !


Les exceptions
package Exercice; try{
int somme = a*b/c;

public class Exercice3 { System.out.println(somme);


public static void main }
(String [] args) catch (ArithmeticException e)
{
{ System.out.println("Interdit de diviser par 0 !");
int a = 5 ;
int b= 6 ; }
finally
int c = 0 ; {
System.out.println("Bloc Finally!");
}
}
}

Le résultat d’affichage est :


Interdit de diviser par 0 !
Bloc Finally!
Les exceptions
Les erreurs les plus fréquentes :

 Division par zéro pour les entiers : ArithmeticException

 référence nulle : NullPointerException

 Type illégale : ClassCastException

 Tentative de création d'un tableau de taille négative : NegativeArraySizeException

 Dépassement de limite d'un tableau : ArrayIndexOutOfBoundsException

 Format non valable : NumberFormatException


Les exceptions
Les erreurs les plus fréquentes :

 Division par zéro pour les entiers : ArithmeticException

 référence nulle : NullPointerException

 Type illégale : ClassCastException

 Tentative de création d'un tableau de taille négative : NegativeArraySizeException

 Dépassement de limite d'un tableau : ArrayIndexOutOfBoundsException

 Format non valable : NumberFormatException

Et si nous voulons créer nos propres


exceptions?
Les exceptions package unpackage;

package unpackage; public class Passagers {


public class Main {
public static void main(String[] args) { void doNbPassager(int value) throws
Passagers monTrain = new Passagers(); MonExption
try{ {
monTrain.doNbPassager(5); if(value < 0){
monTrain.doNbPassager(7); throw new MonExption(value);
monTrain.doNbPassager(8); }
monTrain.doNbPassager(-12); else {
System.out.println("Nombre correct de passagers : "+value);
} }
catch(MonExption a){ }
System.out.println ("Exception générée par : "+ a );
} }
}
}

package unpackage;
public class MonExption extends Exception {
Les exceptions
MonExption(int v)
{
personnalisées.
System.out.println("Le nombre de passager ne peut pas être
négatif:"+ v);
}

}
Les exceptions package unpackage;

package unpackage; public class Passagers {


public class Main {
public static void main(String[] args) { void doNbPassager(int value) throws
Passagers monTrain = new Passagers(); MonExption
try{ {
monTrain.doNbPassager(5); if(value < 0){
monTrain.doNbPassager(7); throw new MonExption(value);
monTrain.doNbPassager(8); }
monTrain.doNbPassager(-12); else {
System.out.println("Nombre correct de passagers : "+value);
} }
catch(MonExption a){ }
System.out.println ("Exception générée par : "+ a );
} }
}
}

package unpackage;
public class MonExption extends Exception { Nous avons 3 classes
MonExption(int v) Main ; Classe principale
{
System.out.println("Le nombre de passager ne peut pas être Passagers : Classe passagers
négatif:"+ v); MonException : Exception Personnalisée
}

}
Les exceptions package unpackage;

package unpackage; public class Passagers {


public class Main {
public static void main(String[] args) { void doNbPassager(int value) throws
Passagers monTrain = new Passagers(); MonExption
try{ {
monTrain.doNbPassager(5); if(value < 0){
monTrain.doNbPassager(7); throw new MonExption(value);
monTrain.doNbPassager(8); }
monTrain.doNbPassager(-12); else {
System.out.println("Nombre correct de passagers : "+value);
} }
catch(MonExption a){ }
System.out.println ("Exception générée par : "+ a );
} }
}
}

Etudions un cas où une exception


package unpackage;
public class MonExption extends Exception { n’est pas générée.
MonExption(int v) On appelle la méthode
{
System.out.println("Le nombre de passager ne peut pas être « doNbPassager » avec
négatif:"+ v); « 5 » comme argument.
}

}
Les exceptions package unpackage;

package unpackage; public class Passagers {


public class Main {
public static void main(String[] args) { void doNbPassager(int value) throws
Passagers monTrain = new Passagers(); MonExption
try{ {
monTrain.doNbPassager(5); if(value < 0){
monTrain.doNbPassager(7); throw new MonExption(value);
monTrain.doNbPassager(8); }
monTrain.doNbPassager(-12); else {
System.out.println("Nombre correct de passagers : "+value);
} }
catch(MonExption a){ }
System.out.println ("Exception générée par : "+ a );
} }
}
}

package unpackage;
public class MonExption extends Exception { La condition n’est pas respectée.
MonExption(int v)
{
System.out.println("Le nombre de passager ne peut pas être
négatif:"+ v);
}

}
Les exceptions package unpackage;

package unpackage; public class Passagers {


public class Main {
public static void main(String[] args) { void doNbPassager(int value) throws
Passagers monTrain = new Passagers(); MonExption
try{ {
monTrain.doNbPassager(5); if(value < 0){
monTrain.doNbPassager(7); throw new MonExption(value);
monTrain.doNbPassager(8); }
monTrain.doNbPassager(-12); else {
System.out.println("Nombre correct de passagers :
} "+value);
catch(MonExption a){ }
System.out.println ("Exception générée par : "+ a ); }
}
} }
}

package unpackage;
public class MonExption extends Exception { On exécute le contenu du bloc else
MonExption(int v)
{
System.out.println("Le nombre de passager ne peut pas être
négatif:"+ v);
}

}
Les exceptions package unpackage;

package unpackage; public class Passagers {


public class Main {
public static void main(String[] args) { void doNbPassager(int value) throws
Passagers monTrain = new Passagers(); MonExption
try{ {
monTrain.doNbPassager(5); if(value < 0){
monTrain.doNbPassager(7); throw new MonExption(value);
monTrain.doNbPassager(8); }
monTrain.doNbPassager(-12); else {
System.out.println("Nombre correct de passagers : "+value);
} }
catch(MonExption a){ }
System.out.println ("Exception générée par : "+ a );
} }
}
}

package unpackage;
public class MonExption extends Exception { Etudions un cas où une exception
MonExption(int v)
{ va être levée.
System.out.println("Le nombre de passager ne peut pas être
négatif:"+ v);
}

}
Les exceptions package unpackage;

package unpackage; public class Passagers {


public class Main {
public static void main(String[] args) { void doNbPassager(int value) throws
Passagers monTrain = new Passagers(); MonExption
try{ {
monTrain.doNbPassager(5); if(value < 0){
monTrain.doNbPassager(7); throw new MonExption(value);
monTrain.doNbPassager(8); }
monTrain.doNbPassager(-12); else {
System.out.println("Nombre correct de passagers : "+value);
} }
catch(MonExption a){ }
System.out.println ("Exception générée par : "+ a );
} }
}
}

package unpackage;
public class MonExption extends Exception { On appelle la méthode doNbPassager
MonExption(int v)
{ avec comme argument -12
System.out.println("Le nombre de passager ne peut pas être
négatif:"+ v);
}

}
Les exceptions package unpackage;

package unpackage; public class Passagers {


public class Main {
public static void main(String[] args) { void doNbPassager(int value) throws
Passagers monTrain = new Passagers(); MonExption
try{ {
monTrain.doNbPassager(5); if(value < 0){
monTrain.doNbPassager(7); throw new MonExption(value);
monTrain.doNbPassager(8); }
monTrain.doNbPassager(-12); else {
System.out.println("Nombre correct de passagers : "+value);
} }
catch(MonExption a){ }
System.out.println ("Exception générée par : "+ a );
} }
}
}

package unpackage;
public class MonExption extends Exception { La condition est respectée. -12 est un
MonExption(int v)
{ nombre négatif.
System.out.println("Le nombre de passager ne peut pas être
négatif:"+ v);
}

}
Les exceptions package unpackage;

package unpackage; public class Passagers {


public class Main {
public static void main(String[] args) { void doNbPassager(int value) throws
Passagers monTrain = new Passagers(); MonExption
try{ {
monTrain.doNbPassager(5); if(value < 0){
monTrain.doNbPassager(7); throw new MonExption(value);
monTrain.doNbPassager(8); }
monTrain.doNbPassager(-12); else {
System.out.println("Nombre correct de passagers : "+value);
} }
catch(MonExption a){ }
System.out.println ("Exception générée par : "+ a );
} }
}
}

package unpackage;
public class MonExption extends Exception { On appelle l’exception
MonExption(int v)
{ « MonException » par le biais du mot
System.out.println("Le nombre de passager ne peut pas être clé throw.
négatif:"+ v);
}

}
Les exceptions package unpackage;

package unpackage; public class Passagers {


public class Main {
public static void main(String[] args) { void doNbPassager(int value) throws
Passagers monTrain = new Passagers(); MonExption
try{ {
monTrain.doNbPassager(5); if(value < 0){
monTrain.doNbPassager(7); throw new MonExption(value);
monTrain.doNbPassager(8); }
monTrain.doNbPassager(-12); else {
System.out.println("Nombre correct de passagers : "+value);
} }
catch(MonExption a){ }
System.out.println ("Exception générée par : "+ a );
} }
}
}

package unpackage;
public class MonExption extends Exception { Nous arrivons dans la méthode qui
MonExption(int v)
{ permet d’exécuter un message
System.out.println("Le nombre de passager ne peut pas être personnalisé en cas d’exception.
négatif:"+ v);
}

}
Les exceptions package unpackage;

package unpackage; public class Passagers {


public class Main {
public static void main(String[] args) { void doNbPassager(int value) throws
Passagers monTrain = new Passagers(); MonExption
try{ {
monTrain.doNbPassager(5); if(value < 0){
monTrain.doNbPassager(7); throw new MonExption(value);
monTrain.doNbPassager(8); }
monTrain.doNbPassager(-12); else {
System.out.println("Nombre correct de passagers : "+value);
} }
catch(MonExption a){ }
System.out.println ("Exception générée par : "+ a );
} }
}
}

package unpackage;
public class MonExption extends Exception { Nous affichons le message.
MonExption(int v)
{
System.out.println("Le nombre de passager ne peut
pas être négatif:"+ v);
}

}
Les exceptions package unpackage;

package unpackage; public class Passagers {


public class Main {
public static void main(String[] args) { void doNbPassager(int value) throws
Passagers monTrain = new Passagers(); MonExption
try{ {
monTrain.doNbPassager(5); if(value < 0){
monTrain.doNbPassager(7); throw new MonExption(value);
monTrain.doNbPassager(8); }
monTrain.doNbPassager(-12); else {
System.out.println("Nombre correct de passagers : "+value);
} }
catch(MonExption a){ }
System.out.println ("Exception générée par :
"+ a ); }
}
}
}

package unpackage;
public class MonExption extends Exception { Nous exécutons le message contenu
MonExption(int v)
{ dans le bloc catch. Ce bloc s’exécutera
System.out.println("Le nombre de passager ne peut pas être à chaque fois qu’une exception est
négatif:"+ v);
} attrapée.
}

Vous aimerez peut-être aussi