Upload
axel-kamalak
View
570
Download
0
Embed Size (px)
DESCRIPTION
cours de java sur les exceptions
Citation preview
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.