44
Les exceptions Les exceptions Axel KAMALAK

Exceptions

Embed Size (px)

DESCRIPTION

cours de java sur les exceptions

Citation preview

Page 1: Exceptions

Les exceptionsLes exceptionsAxel KAMALAK

Page 2: Exceptions

Les exceptionsLes 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.

Page 3: Exceptions

Les exceptionsLes exceptions

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

L’utilisateur

Page 4: Exceptions

Les exceptionsLes exceptions

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

L’utilisateur Le développeur

Page 5: Exceptions

Les exceptionsLes exceptions

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

L’utilisateur peut entrer des données L’utilisateur peut entrer des données non autorisées.

Un chiffre au lieu d’un nombre, …

Page 6: Exceptions

Les exceptionsLes exceptions

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

Le développeur peut avoir oubliéLe développeur peut avoir oubliéde tester une condition

Page 7: Exceptions

Les exceptionsLes exceptions

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

Le développeur peut avoir oubliéLe développeur peut avoir oubliéde tester une condition

Page 8: Exceptions

Les exceptionsLes exceptions

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

Si le développeur écrit trop de test,Si le développeur écrit trop de test,le code devient vite illisible.

Page 9: Exceptions

Les exceptionsLes exceptions

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

Si le développeur écrit trop de test,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.

Page 10: Exceptions

Les exceptionsLes exceptions

package Exercice;

public class Exercice3 {

public static void main (String [] args){

Soit le programme suivant :

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

int somme = a*b/c;

System.out.println(somme);

}}

Page 11: Exceptions

Les exceptionsLes exceptions

package Exercice;

public class Exercice3 {

public static void main (String [] args){

Soit le programme suivant :

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

int somme = a*b/c;

System.out.println(somme);

}}

Page 12: Exceptions

Les exceptionsLes 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);

}}

Page 13: Exceptions

Les exceptionsLes 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);

}}

L’utilisateur peut entrer 0

Page 14: Exceptions

Les exceptionsLes 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);

}}Exception in thread "main" java.lang.ArithmeticException: / by zeroat Exercice.Exercice3.main(Exercice3.java:11)

Génération d’erreur

Page 15: Exceptions

Les exceptionsLes exceptionsNous pourrions résoudre ce problème à l’aide d’un

test if – else.

package Exercice;

public class Exercice3 {

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

int somme = a*b/c;

System.out.println(somme);

}}

Il faudrait tester que la variable c est différent de 0.

Page 16: Exceptions

Les exceptionsLes exceptionsNous pourrions résoudre ce problème à l’aide d’un

test if – else.

package Exercice;

public class Exercice3 {

public static void main (String [] args)public static void main (String [] args){int a = 5 ;int b= 6 ; int c =0 ;if(c!=0){int somme = a*b/c;System.out.println(somme);}

}}

Il faudrait tester que la variable c est différent de 0.

Page 17: Exceptions

Les exceptionsLes exceptionsNous pourrions résoudre ce problème à l’aide d’un

test if – else.

package Exercice;

public class Exercice3 {

public static void main (String [] args)public static void main (String [] args){int a = 5 ;int b= 6 ; int c =0 ;if(c!=0){int somme = a*b/c;System.out.println(somme);}

}}

Ce qui risque d’ alourdir le code et le code va vite devenir illisible.

Page 18: Exceptions

Les exceptionsLes exceptionspublic class Exercice3 {

public static void main (String [] args)

{

int a = 5 ;

int b= 6 ;

int c = 0 ;

try{try{

int somme = a*b/c;

System.out.println(somme);

}

catch (ArithmeticException e)

{

System.out.println("Interdit de diviser par 0 !");

}

}

}

Page 19: Exceptions

Les exceptionsLes exceptionspublic class Exercice3 {

public static void main (String [] args)

{

int a = 5 ;

int b= 6 ;

int c = 0 ;

try{

Cette zone peut générer une erreurtry{

int somme = a*b/c;

System.out.println(somme);

}

catch (ArithmeticException e)

{

System.out.println("Interdit de diviser par 0 !");

}

}

}

une erreur

Page 20: Exceptions

Les exceptionsLes exceptionspublic class Exercice3 {

public static void main (String [] args)

{

int a = 5 ;

int b= 6 ;

int c = 0 ;

try{try{

int somme = a*b/c;

System.out.println(somme);

}

catch (ArithmeticException e)

{

System.out.println("Interdit de diviser par 0 !");

}

}}

Page 21: Exceptions

Les exceptionsLes exceptionspublic class Exercice3 {

public static void main (String [] args)

{

int a = 5 ;

int b= 6 ;

int c = 0 ;

try{On va mettre le code susceptible de générer une

int somme = a*b/c;

System.out.println(somme);

}

catch (ArithmeticException e)

{

System.out.println("Interdit de diviser par 0 !");

}

}}

susceptible de générer une erreur entre le bloc « try »

Page 22: Exceptions

Les exceptionsLes exceptionspublic class Exercice3 {

public static void main (String [] args)

{

int a = 5 ;

int b= 6 ;

int c = 0 ;

try{Dans le cas d’une exception,l’action à réaliser dans le bloc

int somme = a*b/c;

System.out.println(somme);

}

catch (ArithmeticException e)

{

System.out.println("Interdit de diviser par 0 !");

}

}}

l’action à réaliser dans le bloc « catch »

Page 23: Exceptions

Les exceptionsLes exceptionspublic class Exercice3 {

public static void main (String [] args)

{

int a = 5 ;

int b= 6 ;

int c = 0 ;

try{

Il est possible de prévoir 1 ou plusieurs types d’actions à réaliser.

int somme = a*b/c;

System.out.println(somme);

}

catch (ArithmeticException e)

{

System.out.println("Interdit de diviser par 0 !");

}

}}

Page 24: Exceptions

Les exceptionsLes exceptions

Syntaxe JAVA

try

{

..

}}

catch (ClasseException1 variable)

{

}

catch (ClasseException2 variable)

{

}

Page 25: Exceptions

Les exceptionsLes exceptions

Syntaxe JAVA

try

{

Partie de code susceptible de générer une erreur

}}

catch (ClasseException1 variable)

{

}

catch (ClasseException2 variable)

{

}

Page 26: Exceptions

Les exceptionsLes 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)

{

}

Page 27: Exceptions

Les exceptionsLes 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

}

Page 28: Exceptions

Les exceptionsLes exceptions

Le bloc finally

Un bloc finally permet au programmeur de définir un

ensemble d'instructions qui est toujours exécuté, queensemble 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().

Page 29: Exceptions

Les exceptionsLes exceptionspackage Exercice;

public class Exercice3 {

public static void main (String [] args)

{

int a = 5 ;

try{int somme = a*b/c;

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

}int b= 6 ;

int c = 0 ;

}finally{System.out.println("Bloc Finally!");}}}

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

Page 30: Exceptions

Les exceptionsLes exceptionspackage Exercice;

public class Exercice3 {

public static void main (String [] args)

{

int a = 5 ;

try{int somme = a*b/c;

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

}int b= 6 ;

int c = 0 ;

}finally{System.out.println("Bloc Finally!");}}}

Le résultat d’affichage est :Interdit de diviser par 0 !Bloc Finally!

Page 31: Exceptions

Les exceptionsLes exceptions

Les erreurs les plus fréquentes :

� Division par zéro pour les entiers : ArithmeticException

� référence nulle : NullPointerException

Type illégale : ClassCastException� 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

Page 32: Exceptions

Les exceptionsLes exceptions

Les erreurs les plus fréquentes :

� Division par zéro pour les entiers : ArithmeticException

� référence nulle : NullPointerException

Type illégale : ClassCastException� 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?

Page 33: Exceptions

Les exceptionsLes exceptionspackage unpackage;public class Main {public static void main(String[] args) {Passagers monTrain = new Passagers();try{monTrain.doNbPassager(5); monTrain.doNbPassager(7); monTrain.doNbPassager(8); monTrain.doNbPassager(-12);

}catch(MonExption a){

package unpackage;

public class Passagers {

void doNbPassager(int value) throws MonExption{if(value < 0){throw new MonExption(value);}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 {MonExption(int v){System.out.println("Le nombre de passager ne peut pas être négatif:"+ v);}

}

}

}

Les exceptionspersonnalisées.

Page 34: Exceptions

Les exceptionsLes exceptionspackage unpackage;public class Main {public static void main(String[] args) {Passagers monTrain = new Passagers();try{monTrain.doNbPassager(5); monTrain.doNbPassager(7); monTrain.doNbPassager(8); monTrain.doNbPassager(-12);

}catch(MonExption a){

package unpackage;

public class Passagers {

void doNbPassager(int value) throws MonExption{if(value < 0){throw new MonExption(value);}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 {MonExption(int v){System.out.println("Le nombre de passager ne peut pas être négatif:"+ v);}

}

}

}

Nous avons 3 classes�Main ; Classe principale�Passagers : Classe passagers �MonException : Exception Personnalisée

Page 35: Exceptions

Les exceptionsLes exceptionspackage unpackage;public class Main {public static void main(String[] args) {Passagers monTrain = new Passagers();try{monTrain.doNbPassager(5); monTrain.doNbPassager(7); monTrain.doNbPassager(8); monTrain.doNbPassager(-12);

}catch(MonExption a){

package unpackage;

public class Passagers {

void doNbPassager(int value) throws MonExption{if(value < 0){throw new MonExption(value);}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 {MonExption(int v){System.out.println("Le nombre de passager ne peut pas être négatif:"+ v);}

}

}

}

Etudions un cas où une exception n’est pas générée. On appelle la méthode « doNbPassager » avec « 5 » comme argument.

Page 36: Exceptions

Les exceptionsLes exceptionspackage unpackage;public class Main {public static void main(String[] args) {Passagers monTrain = new Passagers();try{monTrain.doNbPassager(5); monTrain.doNbPassager(7); monTrain.doNbPassager(8); monTrain.doNbPassager(-12);

}catch(MonExption a){

package unpackage;

public class Passagers {

void doNbPassager(int value) throws MonExption{if(value < 0){throw new MonExption(value);}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 {MonExption(int v){System.out.println("Le nombre de passager ne peut pas être négatif:"+ v);}

}

}

}

La condition n’est pas respectée.

Page 37: Exceptions

Les exceptionsLes exceptionspackage unpackage;public class Main {public static void main(String[] args) {Passagers monTrain = new Passagers();try{monTrain.doNbPassager(5); monTrain.doNbPassager(7); monTrain.doNbPassager(8); monTrain.doNbPassager(-12);

}catch(MonExption a){

package unpackage;

public class Passagers {

void doNbPassager(int value) throws MonExption{if(value < 0){throw new MonExption(value);}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 {MonExption(int v){System.out.println("Le nombre de passager ne peut pas être négatif:"+ v);}

}

}}

}

On exécute le contenu du bloc else

Page 38: Exceptions

Les exceptionsLes exceptionspackage unpackage;public class Main {public static void main(String[] args) {Passagers monTrain = new Passagers();try{monTrain.doNbPassager(5); monTrain.doNbPassager(7); monTrain.doNbPassager(8); monTrain.doNbPassager(-12);

}catch(MonExption a){

package unpackage;

public class Passagers {

void doNbPassager(int value) throws MonExption{if(value < 0){throw new MonExption(value);}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 {MonExption(int v){System.out.println("Le nombre de passager ne peut pas être négatif:"+ v);}

}

}

}

Etudions un cas où une exception va être levée.

Page 39: Exceptions

Les exceptionsLes exceptionspackage unpackage;public class Main {public static void main(String[] args) {Passagers monTrain = new Passagers();try{monTrain.doNbPassager(5); monTrain.doNbPassager(7); monTrain.doNbPassager(8); monTrain.doNbPassager(-12);

}catch(MonExption a){

package unpackage;

public class Passagers {

void doNbPassager(int value) throws MonExption{if(value < 0){throw new MonExption(value);}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 {MonExption(int v){System.out.println("Le nombre de passager ne peut pas être négatif:"+ v);}

}

}

}

On appelle la méthode doNbPassageravec comme argument -12

Page 40: Exceptions

Les exceptionsLes exceptionspackage unpackage;public class Main {public static void main(String[] args) {Passagers monTrain = new Passagers();try{monTrain.doNbPassager(5); monTrain.doNbPassager(7); monTrain.doNbPassager(8); monTrain.doNbPassager(-12);

}catch(MonExption a){

package unpackage;

public class Passagers {

void doNbPassager(int value) throws MonExption{if(value < 0){throw new MonExption(value);}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 {MonExption(int v){System.out.println("Le nombre de passager ne peut pas être négatif:"+ v);}

}

}

}

La condition est respectée. -12 est un nombre négatif.

Page 41: Exceptions

Les exceptionsLes exceptionspackage unpackage;public class Main {public static void main(String[] args) {Passagers monTrain = new Passagers();try{monTrain.doNbPassager(5); monTrain.doNbPassager(7); monTrain.doNbPassager(8); monTrain.doNbPassager(-12);

}catch(MonExption a){

package unpackage;

public class Passagers {

void doNbPassager(int value) throws MonExption{if(value < 0){throw new MonExption(value);}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 {MonExption(int v){System.out.println("Le nombre de passager ne peut pas être négatif:"+ v);}

}

}

}

On appelle l’exception « MonException » par le biais du mot clé throw.

Page 42: Exceptions

Les exceptionsLes exceptionspackage unpackage;public class Main {public static void main(String[] args) {Passagers monTrain = new Passagers();try{monTrain.doNbPassager(5); monTrain.doNbPassager(7); monTrain.doNbPassager(8); monTrain.doNbPassager(-12);

}catch(MonExption a){

package unpackage;

public class Passagers {

void doNbPassager(int value) throws MonExption{if(value < 0){throw new MonExption(value);}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 {MonExption(int v){System.out.println("Le nombre de passager ne peut pas être négatif:"+ v);}

}

}

}

Nous arrivons dans la méthode qui permet d’exécuter un message personnalisé en cas d’exception.

Page 43: Exceptions

Les exceptionsLes exceptionspackage unpackage;public class Main {public static void main(String[] args) {Passagers monTrain = new Passagers();try{monTrain.doNbPassager(5); monTrain.doNbPassager(7); monTrain.doNbPassager(8); monTrain.doNbPassager(-12);

}catch(MonExption a){

package unpackage;

public class Passagers {

void doNbPassager(int value) throws MonExption{if(value < 0){throw new MonExption(value);}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 {MonExption(int v){System.out.println("Le nombre de passager ne peut pas être négatif:"+ v);}

}

}

}

Nous affichons le message.

Page 44: Exceptions

Les exceptionsLes exceptionspackage unpackage;public class Main {public static void main(String[] args) {Passagers monTrain = new Passagers();try{monTrain.doNbPassager(5); monTrain.doNbPassager(7); monTrain.doNbPassager(8); monTrain.doNbPassager(-12);

}catch(MonExption a){

package unpackage;

public class Passagers {

void doNbPassager(int value) throws MonExption{if(value < 0){throw new MonExption(value);}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 {MonExption(int v){System.out.println("Le nombre de passager ne peut pas être négatif:"+ v);}

}

}

}

Nous exécutons le message contenu dans le bloc catch. Ce bloc s’exécutera à chaque fois qu’une exception est attrapée.