Exceptions

Post on 26-May-2015

570 views 0 download

description

cours de java sur les exceptions

Transcript of Exceptions

Les exceptionsLes exceptionsAxel KAMALAK

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.

Les exceptionsLes exceptions

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

L’utilisateur

Les exceptionsLes exceptions

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

L’utilisateur Le développeur

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, …

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

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

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.

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.

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

}}

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

}}

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

}}

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

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

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.

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.

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.

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 !");

}

}

}

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

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 !");

}

}}

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 »

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 »

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 !");

}

}}

Les exceptionsLes exceptions

Syntaxe JAVA

try

{

..

}}

catch (ClasseException1 variable)

{

}

catch (ClasseException2 variable)

{

}

Les exceptionsLes exceptions

Syntaxe JAVA

try

{

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

}}

catch (ClasseException1 variable)

{

}

catch (ClasseException2 variable)

{

}

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)

{

}

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

}

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().

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 !

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!

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

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?

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.

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

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.

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.

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

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.

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

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.

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.

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.

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.

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.