Année 2008-2009. Les exceptions Java. Nicolas Baudru mél : nicolas.baudru@esil.univmed.fr page web : nicolas.baudru.perso.esil.univmed.



Documents pareils
Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Programmation Orientée Objet

Un ordonnanceur stupide

Développement Logiciel

La gestion des exceptions

Programmer en JAVA. par Tama

Programmation par les Objets en Java

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Programmation Objet Java Correction

Généralités sur le Langage Java et éléments syntaxiques.

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

Héritage presque multiple en Java (1/2)

Corrigé des exercices sur les références

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts

RMI le langage Java XII-1 JMF

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Tp 1 correction. Structures de données (IF2)

Traitement de données

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Auto-évaluation Programmation en Java

Exercices INF5171 : série #3 (Automne 2012)

Premiers Pas en Programmation Objet : les Classes et les Objets

Maîtriser le menu contextuel dans un OfficeBean

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Bases du langage. Historique Applications et applets Éléments de base du langage Classes et objets Les exceptions

Télécom Nancy Année

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Synchro et Threads Java TM

Notion de thread (1/2)

Environnements de développement (intégrés)

LOG4430 : Architecture logicielle et conception avancée

Remote Method Invocation Les classes implémentant Serializable

Remote Method Invocation en Java (RMI)

Java RMI. Arnaud Labourel Courriel: Université de Provence. 8 mars 2011

Initiation à JAVA et à la programmation objet.

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

La norme Midi et JavaSound

Chapitre 10. Les interfaces Comparable et Comparator 1

Utiliser Java sans BlueJ

TP1 : Initiation à Java et Eclipse

Compte-rendu de projet de Système de gestion de base de données

Architecture Orientée Service, JSON et API REST

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Tutoriel d installation de Hibernate avec Eclipse

1 Définition d une classe en Java

Java Licence Professionnelle CISII,

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Cours 1: Java et les objets

I. Introduction aux fonctions : les fonctions standards

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

ACTIVITÉ DE PROGRAMMATION

TP1. Outils Java Eléments de correction

INITIATION AU LANGAGE JAVA

Remote Method Invocation (RMI)

Une introduction à Java

Création d une application JEE

JAVA. Introduction à la programmation objet avec java 1/4. Nadir BOUSSOUKAIA

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Introduction : les processus. Introduction : les threads. Plan

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

Programmation Par Objets

Gestion distribuée (par sockets) de banque en Java

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

Calcul Parallèle. Cours 5 - JAVA RMI

Année Universitaire 2009/2010 Session 2 de Printemps

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Initiation à la programmation orientée-objet avec le langage Java

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

RN2-Programmation Orientée Objet - JAVA CH 1 Introduction à la POO et Java

Java c est quoi? Java pourquoi?

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

JAVA 8. JAVA 8 - Les fondamentaux du langage. Les fondamentaux du langage Java. Avec exercices pratiques et corrigés JAVA 8 29,90.

Stratégie de sécurité grâce au logiciel libre. Frédéric Raynal Cédric Blancher

Java Licence Professionnelle CISII,

Création d un service web avec NetBeans 5.5 et SJAS 9

Utilisation d objets : String et ArrayList

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

Éléments d'architecture des ordinateurs

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

1. Introduction Création d'une macro autonome Exécuter la macro pas à pas Modifier une macro... 5

Bases Java - Eclipse / Netbeans

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Tolérance aux Fautes des Grappes d Applications J2EE. Applications Internet dynamiques

Chapitre 2. Classes et objets

Flux de données Lecture/Ecriture Fichiers

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

Transcription:

Année 2008-2009 Les exceptions Java Nicolas Baudru mél : nicolas.baudru@esil.univmed.fr page web : nicolas.baudru.perso.esil.univmed.fr 1

Introduction Supposez que vous écrivez un programme qui accède à un chier, ou qui se connecte à un serveur. Que se passerait-il si le chier disparaît, ou si le serveur tombe en panne? Le comportement de votre programme serait au mieux interrompu, au pire deviendrait imprévisible. L'idéal serait de pouvoir écrire du code qui gèrerait ces situations exceptionnelles. C'est ce que nous allons voir dans ce cours. 2

L'API JavaSound JavaSound est une collection de classes et d'interfaces Java faisant partie de la bibliothèque de classe standard de J2SE. Elle est composée de deux parties : MIDI (Musical Instrument Digital Interface). et Sampled. Un chier MIDI peut être vu comme une partition de musique : les données MIDI ne sont pas des sons mais des instructions indiquant comment un instrument MIDI peut restituer des sons. Ici nous allons nous servir d'un instrument logiciel fourni dans Java : le synthétiseur, correspondant à un objet Java de type Sequencer. 3

Un programme qui ne compile pas import javax. sound. midi.*; public class MiniMusiqueApp { public static void main ( String [] args ) { MiniMusiqueApp mini = new MiniMusiqueApp (); mini. jouer (); public void jouer () { Sequencer lecteur = MidiSystem. getsequencer (); System. out. println (" Nous avons un sequenceur " ); % javac MiniMusiqueApp. java MiniMusiqueApp. java : 10 : unreported exception javax. sound. midi. MidiUnvailableException ; must be caught or declared to be thrown... 4

Explication 1 Supposons que vous voulez appeler une méthode d'une classe de la bibliothèque standard Java. 2 Cette méthode fait quelque chose de risqué, qui peut ne pas fonctionner au moment de l'exécution (ex : ouvrir un chier, ouvrir une connexion réseau, endormir un processus,...) 3 Vous devez dire au compilateur que vous savez que la méthode que vous appelez est risquée. 4 Vous écrivez alors du code qui gère l'erreur si elle se produit. 5

Les exceptions La gestion des exceptions Java est un mécanisme qui permet de traiter toutes les situations inattendues qui peuvent se produire au moment de l'exécution. Elle s'appuie sur le fait que vous savez que la méthode peut avoir un comportement risqué. Si c'est le cas, vous devez écrire explicitement un morceau de code qui prend en compte cette éventualité. Lorsqu'une méthode possède un comportement risqué, on dit qu'elle peut générer (ou lancer) une exception. Comment savoir si une méthode lance une exception? 6

Le mot clé throws Pour savoir si une méthode peut lancer une exception, vous devez consulter la javadoc, et vérier si la méthode contient une clause throws dans sa déclaration. 7

Comment utiliser une méthode risqué Nous avons déjà vu que le compilateur Java veut savoir que vous savez que vous utilisez une méthode risquée. Pour ce faire vous devez envelopper le code risquée dans un bloc try/catch. try { // comportements risqués... catch { Exception ex { // code pour essayer de récupérer l ' erreur Ce qu'il faut mettre dans le bloc catch dépend de l'erreur à traiter. Que feriez-vous si une exception était lancée lors d'une connexion à un serveur? Et lors de l'ouverture d'un chier? Qu'est-ce que la variable ex? 8

Les exceptions Une exception est un objet de type Exception. Et grâce au polymorphisme un objet de type Exception peut être une instance de nimporte quelle sous-classe d'exception. Throwable getmessage() printstacktrace() Exception IOException InterruptedException MidiUnvaailableException 9

Exemple import javax. sound. midi.*; public class MiniMusiqueApp { public static void main ( String [] args ) { MiniMusiqueApp mini = new MiniMusiqueApp (); mini. jouer (); public void jouer () { try { Sequencer lecteur = MidiSystem. getsequencer (); System. out. println (" Nous avons un sequenceur " ); catch ( MidiAvailableException ex ) { System. out. println (" Aïe! un problème." ); 10

Lancer et intercepter une exception En général, un programmeur Java passera plus de temps à gérer les exceptions qu'à les créer. Bien que la plupart des méthodes lançant des exceptions font partie de la bibliothèque Java, il peut vous arriver de devoir écrire vous-même une méthode risquée. Pour cela, il faut déclarer la méthode risquée comme étant Throwable (mot clé throws), puis dans le code de cette méthode, créer une nouvelle Exception puis la lancer (mot clé throw). // quelque part... public void prendrerisque () throws MauvaiseException { if ( SansEspoir ) { throw new MauvaiseException (); // ailleurs dans le code public void croiserlesdoigts () { try { unobjet. prendrerisque (); catch ( MauvaiseException ex ) { ex. printstacktrace (); 11

Exceptions vériées ou non vériées par le compilateur Pour que votre programme compile : si vous lancez une exception dans votre code, vous devez la déclarer au moyen du mot-clé "throws" dans votre déclaration de méthode. Si vous appelez une méthode qui lance une exception, vous devez faire savoir au compilateur que vous savez que cette exception existe. Deux façons de faire : utiliser un bloc try/catch pour gérer l'exception ; choisir d'esquiver l'exception et de ne pas la gérer (voir plus loin). Il existe cependant une exception à cette règle. Les RuntimeExceptions, (une sous-classe de la classe Exception) ne sont pas vériées par le compilateur. Il n'est donc pas nécessaire de les traiter. Exemple : NullPointerException et DivideByException héritent de RuntimeExceptions et ne sont pas traitées par le compilateur.. Pourquoi le compilateur ne s'occupe-t-il pas de ce type d'exceptions? 12

Un premier résumé Une méthode peut lancer une exception si quelque chose échoue au moment de l'exécution. Une exception est toujours un objet de type Exception. Les exceptions vériées par le compilateur doivent être traitées. Seules les RuntimeExceptions peuvent ne pas être traitées. Traiter une exception signie ou bien la gérer (bloc try/catch) ou bien "l'éviter" (voir plus loin). Les méthodes qui peuvent lancer des exceptions doivent être déclarées "throws". Et l'exception peut alors être lancée à l'aide du mot clé "throw" suivi d'un nouvel objet de type exception. throw new MaNouvelleException ( ); 13

Contrôle de ot dans un bloc try/catch try { // 1) o. prendreunrisque (); catch ( Exception ex ) { // 2) System. out. println (" perdu!") // 3) System. out. println (" traitement terminé!" ); //... le reste de la méthode Règles : si le bloc 1) réussi, passer au bloc 3) si le bloc 1) échoue quelque part, passer au bloc 2), puis au bloc 3) 14

Contrôle de ot dans un bloc try/catch en utilisant nally Si une portion de code doit être exécutée, qu'une exception se produise ou pas, vous pouvez la placer dans un bloc nally : Règles : try { // 1) o. prendreunrisque (); catch ( Exception ex ) { // 2) System. out. println (" perdu!") finally { // 3) System. out. println (" traitement terminé!") // 4)... le reste de la méthode si le bloc 1) réussi, passer au bloc 3), puis au bloc 4) si le bloc 1) échoue, passer au bloc 2), puis au bloc 3), puis au bloc 4) si le bloc 1) ou 2) a une instruction return, 3) s'exécute quand même juste avant d'eectuer le return. 15

Une méthode peut lancer plusieurs exceptions public class Lessive { public void fairelalessive () throws PantalonException, LingerieException { // le code pouvant lancer des // PantalonExceptions ou des LingerieExceptions. //... ailleurs Lessive l = new Lessive (); try { l. fairelalessive () ; catch ( PantalonException pex ) {... catch ( LingerieException lex ) {... 16

Exceptions et polymorphismes Vous pouvez déclarer des exceptions en utilisant un supertype des exceptions que vous lancez. Il est alors possible de lancer des sous-classes d'exceptions sans les déclarer explicitement. public void fairelalessive ( ) throws VetementException {... throw new PantalonException ();... throw new LingerieException (); Vous pouvez de la même manière intercepter des exceptions en utilisant un supertype de l'exception lancée. try { l. fairelalessive (); catch ( VetementException vex ) { // traitement Mais alors, pourquoi ne pas toujours récupérer un objet de type Exception? 17

Ordonner les blocs catch Si plusieurs types d'exception sont possibles, et que vous souhaitez les traiter de manière diérente, vous devez les récupérer en allant de la plus spécique (dans l'héritage) à la plus générique. Lessive l = new Lessive (); try { l. fairelalessive () ; catch ( PantalonVeloursException pvex ) {... catch ( PantalonException pex ) {... catch ( LingerieException lex ) {... catch ( VetementException vex ) {... 18

Esquiver une exception Si vous ne voulez pas gérer une exception, vous pouvez l'esquiver en la déclarant. Esquiver une exception signie que votre méthode ne la traitera pas (pas de bloc try/catch pour cette exception). Votre méthode peut alors lancer indirectement une exception. Par conséquent vous devez déclarer votre méthode throws, et ce sera à la méthode appelant votre méthode de gérer à son tour l'exception : le problème est reporté à plus tard. public void unemethode () throws MonException { l. fairelalessive () ; Quel est le type de l'exception lancée par votre méthode? Que se passe-t-il si tout le monde (même le main()) esquive l'exception? 19

Try/catch et la pile 20

Conclusion Il n'existe que deux façons de satisfaire le compilateur lors de l'utilisation d'une méthode risquée (qui lance une exception) : 1 gérer l'exception i.e. utiliser un bloc try/catch/nally. 2 l'esquiver et traiter le problème plus tard : vous devez alors déclarer votre méthode "throws", et laisser gérer l'exception à la méthode appelante. 21