You are on page 1of 219

Programmation Oriente Objet

Java
1

Table des matires


I.
1. 2. 3. 4.

Prsentation

Notion dobjet Notion de classe Notion dencapsulation Notion dhritage

II. III.

IV.
V.

Premier programme Java Les types primitifs de Java Les oprateurs Les instructions de contrle
2

VI.
1. 2. 3. 4. 5. 6. 7.

Les classes et les objets

Rgle dcriture des mthodes Notion de classe Notion de constructeur Accesseurs et modificateurs Affectation et comparaison dobjets Surdfinition ou surcharge Variables et mthodes de classe Dclaration Dclaration avec initialisation Utilisation d'un tableau La taille d'un tableau Exercices Passage des paramtres Les tableaux d'objets

VII.
1. 2.

Les tableaux
3.
4. 5. 6. 7.

VIII.
1. 2.

Les chanes de caractres


La classe String La classe StringBuffer

IX.
1. 2. 3. 4. 5. 6. 7. 8. 9.

Lhritage

Gnralisation-Spcialisation Hritage et constructeurs Modificateurs de visibilit Redfinition et surcharge Polymorphisme Classes et mthodes finales Les classes abstraites Les interfaces La classe Object

X.

Les exceptions
4

I. Prsentation

Quest-ce que java ?

Java est un langage de programmation


Java est aussi une plateforme

La plateforme java, uniquement software, est excute sur la plateforme du systme dexploitation Elle est constitue de :

La Java Virtual Machine (JVM) Des interfaces de programmation dapplication (API)

Atouts de Java

Langage de programmation simple ; Orient objet ; Comporte un grand nombre dobjets prdfinis pour lutilisateur ; Neutre architecturalement ( = portabilit ) ; Distribu gratuitement !!!
6

Neutralit architecturale
Un programme Java est compil puis interprt.
MonProgramme.java

Compilateur JAVA

MonProgramme.class

Mac(JVM)

Windows(JVM)

Unix(JVM)

Historique du langage

1991 : dveloppement de OAK

Langage simple, portable et orient objets Pour la programmation de petits appareils lectromnagers Emprunte la portabilit du Pascal (VM) et la syntaxe du C++
8

Historique du langage

1995 : intgration de la JVM dans Netscape

OAK tant un nom dpos, le projet sappellera JAVA Apparition des Applets qui ont fait le succs de Java (remplacs aujourdhui par Flash)

Historique du langage

Dcembre 98 : SUN annonce une nouvelle dnomination pour ses produits Java :

Plate-forme Java 2

Juillet 2009 : ORACLE rachte SUN


Version actuelle : J2SE 7
10

Historique du langage

Pourquoi Java ?

11

En programmation oriente objet, il y a 4 notions fondamentales :


les objets ; les classes ; l'encapsulation des donnes ;

l'hritage ;

12

1. Notion dobjet

Objet = unit autonome qui a ses propres donnes et un ensemble de procdures qui agissent sur ces donnes ;

13

1. Notion dobjet
a) les donnes

Une voiture a des donnes concernant sa couleur, sa marque,

En terme de programmation, les donnes sont stockes dans des variables. Si nous reprsentons plusieurs voitures, chacune aura ses propres variables. (*)
14

1. Notion dobjet
b) les comportements

Pour accder aux donnes, il faut prvoir un ensemble de comportements, ils constitueront une interface entre lobjet et les programmes.
Exemples de comportement : acclrer, freiner, tourner(gauche), tourner(droite),

15

1. Notion dobjet
En jargon orient objet, on dira que :
- les donnes sont les attributs dun objet ; - les comportements sont les mthodes de lobjet ;

16

2. Notion de classe

Les objets sont dfinis par des classes ; Une classe est le moule dun objet ;

On peut crer plusieurs objets partir


dune seule classe. (*)
17

2. Notion de classe
En jargon orient objet, on dira :

un objet est une instance dune classe

18

3. Notion dencapsulation

Soit un lecteur Mp3, il nest pas ncessaire de connatre son fonctionnement interne pour pouvoir lutiliser. Lutilisateur se sert uniquement de son interface (play, stop, next) Les objets en POO doivent fonctionner de la mme manire.
19

3. Notion dencapsulation

Lorsquun objet est parfaitement crit, lutilisateur ne peut accder directement aux donnes ;
Il doit passer par les mthodes qui servent dinterface entre lobjet et ses utilisateurs ;

20

3. Notion dencapsulation

21

4. Notion dhritage

L'hritage est une technique qui permet de crer une nouvelle classe partir d'une classe existante. La sous-classe hrite des caractristiques de la classe de base.
Intrt : pouvoir dfinir de nouveaux attributs et mthodes pour la sous-classe, qui viennent s'ajouter ceux et celles hrits. (*)
22

II. Premier programme JAVA


public class PremProg
{ public static void main (String args[]) { System.out.println ("Premier programme Java") ; } }

23

III. Les types primitifs de Java


( = types de base)

24

Les types entiers

25

Remarque : Pour obtenir ces valeurs on peut faire appel aux constantes prdfinies Byte.MIN_VALUE, Byte.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE, etc

26

Les types flottants

27

Le type caractre

char

2 octets

code universel Unicode

28

Le type boolen

boolean

valeur logique true ou false boolean condition ; condition = n > p ;

Exemple d'initialisation :

29

Initialisation de variable
int n = 5 ; int n ; n = 5 ; int duo = 2 * n ; En Java, une variable doit tre initialise avant d'tre utilise (sinon erreur de compilation).

30

Les constantes
final int N = 20 ; final int N = 2 * p ;

final int N ; N = Clavier.lireInt () ; // Premire affectation : OK N=N+1; // 2me affectation : erreur de compilation

31

IV. Les oprateurs

32

Oprateurs arithmtiques
+
* / %

addition
soustraction multiplication division modulo, reste de la division sur entiers ou flottants
33

Priorits des oprateurs (en ordre dcroissant)


+ - unaires * + / % de droite gauche de gauche droite de gauche droite

Pour changer la priorit : insrer des parenthses

34

Il y a conversion implicite dans l'valuation des expressions arithmtiques ;


Elle tient compte de la priorit des oprateurs ; Peut se faire condition de ne pas dnaturer la valeur initiale :
int long float double

35

Exemple : n * p + x ; (avec n int, p long et x float)

36

Oprateurs relationnels
< <= > >= == != infrieur infrieur ou gal suprieur suprieur ou gal gal diffrent
37

Oprateurs logiques
! & ^ | && ngation et ou exclusif ou inclusif et avec court-circuit

||

ou inclusif avec court-circuit

38

Fonctionnement des oprateurs de court-circuit (&& et ||)

La 2me condition nest value que si cest indispensable pour valuer la condition complte
Exemple:
if (n!=0 && trouv==true)
// si n=0, la suite nest mme pas value => plus rapide !
39

Oprateurs dincrmentation
++ pr ou post-incrmentation -- pr ou post-dcrmentation

Oprateur gauche de son oprande : on incrmente ou dcrmente d'abord ; Oprateur droite de son oprande : on incrmente ou dcrmente aprs ;
40

Exemples
a = ++ i ;
// i=i+1; a=i;

a = i ++ ;

//

a=i;

i=i+1;

tab[i++] = Clavier.lireInt() ;
// garnit tab[i] puis incrmente i

i ++ ; ++ i ;

// sont 2 instructions quivalentes


41

Oprateurs daffectation largie


Java permet de condenser les affectations. Exemples : a=a+b; n=n*v; devient devient a += b ; n *= v ;

42

Loprateur de CAST
Si a et b sont de type float, et n de type entier : n=a/b; donne une erreur de compilation "possible loss of precision - found float - required int"

43

Pour forcer la conversion de l'expression en entier, on utilise un oprateur nomm cast.

n = (int) (a / b) ;
Que pensez-vous de ceci ? n = (int) a / b ; Nouvelle erreur de compilation

44

Remarque :
le cast (la conversion) est possible galement vers les autres types de donnes numriques

45

Exercice
int a = 1 , b = 2 ; float f = 5.5f ; double d = 8.4 ; f=a+b; a = b * 2.5 ; a = (int) d + f ; d=a*f; f = a + (int) d ;

Instructions valides ???

46

Exercice
int a = 1 , b = 2 ; float f = 5.5f ; double d = 8.4 ; f=a+b; a = b * 2.5 ; a = (int) d + f ; d=a*f; f = a + (int) d ;

Instructions valides ???

// oui

47

Exercice
int a = 1 , b = 2 ; float f = 5.5f ; double d = 8.4 ; f=a+b; a = b * 2.5 ; a = (int) d + f ; d=a*f; f = a + (int) d ;

Instructions valides ???

// oui // non (expression : double)

48

Exercice
int a = 1 , b = 2 ; float f = 5.5f ; double d = 8.4 ; f=a+b; a = b * 2.5 ; a = (int) d + f ; d=a*f; f = a + (int) d ;

Instructions valides ???

// oui // non (expression : double) // non (expression : float)

49

Exercice
int a = 1 , b = 2 ; float f = 5.5f ; double d = 8.4 ; f=a+b; a = b * 2.5 ; a = (int) d + f ; d=a*f; f = a + (int) d ; // // // //

Instructions valides ???

oui non (expression : double) non (expression : float) oui


50

Exercice
int a = 1 , b = 2 ; float f = 5.5f ; double d = 8.4 ; f=a+b; a = b * 2.5 ; a = (int) d + f ; d=a*f; f = a + (int) d ; // // // // //

Instructions valides ???

oui non (expression : double) non (expression : float) oui oui


51

Rfrences pour les logiciels


www.telecharger.com pour Textpad

http://java.sun.com

pour J2SE

52

V. Les instructions de contrle

53

Les alternatives
Instruction "if"
if (condition) { instr1 ; instr2 ; } else { instr3 ; instr4 ; }

54

Les alternatives
Instruction "switch"
switch (expression) { case const-1 : instr1 ; instr2 ; ; break; case const-2 : instr3 ; instr4 ; ; break; default : instr5 ; instr6 ; ; }
55

Les alternatives
Exemple1
switch (cat) { case 1 : System.out.println ("Junior"); case 2 : System.out.println ("Adulte"); case 3 : System.out.println ("Senior"); default : System.out.println ("Non dfini") ; }

56

Les alternatives
Exemple2
switch (mois) { case 1 : case 2 : case 3: case 4 : case 5 : case 6 : System.out.println ("Premier semestre") ; break ; case 7 : case 8 : System.out.println ("Vacances") ; break ; default : System.out.println ("Fin de l'anne") ; }

57

Les rptitives
Instruction "do while"
do {

} while (condition) ;

srie d'instructions ;

On excute 1 fois la srie d'instructions avant de vrifier la condition !!!


58

Les rptitives
Exemple
int som = 0; do { System.out.println(Entrez votre nombre); nb = Clavier.lireInt() ; som += nb; } while (nb != 0) ;

Que fait ce programme ?

59

Les rptitives
Instruction "while"
while (condition) { srie d'instructions ; } On vrifie la condition avant d'entrer dans la rptitive !!!
60

Les rptitives
Exemple
int nb, som=0; while (nb != 0) { System.out.println(Entrez votre nombre); nb = Clavier.lireInt() ; som += nb; }

Que fait ce programme ?


61

Les rptitives
Erreur de compilation ! Il faut initialiser nb avant de lutiliser !
int nb=0, som=0;

Que se passe-t-il ?

while (nb != 0) { System.out.println(Entrez votre nombre); nb = Clavier.lireInt() ; som += nb; }


62

Les rptitives
int nb, som=0; System.out.println(Entrez votre nombre); nb = Clavier.lireInt() ;
while (nb != 0) { som += nb; System.out.println(Entrez votre nombre); nb = Clavier.lireInt() ; }
63

Les rptitives
Instruction "for"
for ( initialisations ; condition ; incrmentations ) { } srie-d'instructions ;

64

Les rptitives
Exemple 1

int i ; for ( i = 1 ; i < 4 ; i++ ) { System.out.println ( "Passage " + i) ; }

Que donnera l'affichage ?


65

Les rptitives
Exemple 2

int i ; for ( i = 1 ; i < 4 ; i++ ) System.out.println ( "Passage " + i) ; System.out.print ( "I vaut " + i ) ;

Que donnera l'affichage ?


66

Les rptitives
Exemple 3

int i ; for ( i = 6 ; i > 0 ; i -= 2 ) { System.out.print ( "Valeur " ) ; System.out.println ( i ) ; }

Que donnera l'affichage ?


67

Exercices
Afficher les annes jusqu'en 2500. bissextiles d'aujourd'hui

Remarque : une anne est bissextile si elle est multiple de 4 mais pas multiple de 100. Rsoudre cet exercice 1) avec for ; 2) avec while ; 3) avec do while ;
68

Les rptitives
Instruction "break"
-

Break peut tre utilise dans une rptitive pour sortir prmaturment ;

Exemple : Calculer la somme de maximum 10 nombres entrs au clavier ou s'arrter avant si on entre 0
69

Les rptitives
int i, n, som ; for ( i=1, som=0 ; i <= 10 ; i++ ) { n = Clavier.lireInt() ; if ( n == 0) break ; // Ce break nous branche som += n ; } // ici System.out.print( "Somme des " + (i-1) + " nb = " + som) ;

70

Les rptitives
Instruction "break" avec tiquette
-

Dans le cas de rptitives imbriques, break fait sortir de la boucle la + interne ; Pour sortir de + d'un niveau, on utilisera le break avec tiquette :

71

Les rptitives
Instruction "break" avec tiquette
boucle : while () { for () { break boucle ; // Ce break nous branche } } // ici cette fois

72

Les rptitives
Instruction "continue"

continue permet de passer prmaturment au tour de boucle suivant ;

73

Les rptitives
Exemple
int i ; for ( i = 1 ; i <= 5 ; i++ ) { System.out.println (i) ; if ( i < 4 ) continue ; System.out.println ("Fin " + i) ; } System.out.println ("Fin de boucle") ;

Qu'affichera cette squence d'instructions ?


74

Les rptitives
Solution
1 2 3 4 Fin 4 5 Fin 5 Fin de boucle
75

Les rptitives
Instruction "continue" avec tiquette
-

Dans le cas de rptitives imbriques, continue concerne la boucle la + interne ; Pour descendre de + d'un niveau il y a le continue avec tiquette :

76

Les rptitives
Instruction "continue" avec tiquette
boucle : while (...) { for () { continue boucle ; // Ce continue fait poursuivre } } // la boucle ici

77

Consigne pour le laboratoire :


La classe Clavier sera utilise rgulirement Conseil : la stocker dans un dossier au choix et mentionner le chemin du dossier dans une variable d'environnement appele 'Classpath' Marche suivre :

Paramtres /Panneau de configuration / Systme / Avanc / Variables denvironnement

78

Dmonstration
Nouvelle variable Classpath avec le chemin du dossier qui contient la classe Clavier et le point qui dsigne le rpertoire courant

79

VI. Les classes et les objets

80

1. Rgle d'criture des mthodes


a) Mthodes ne fournissant aucun rsultat Certaines mthodes effectuent des actions et ne renvoient pas de valeur.
81

Syntaxe
Dclaration: static void nom-mthode ( liste d'arguments ) { instructions ; } Appel: nom-mthode ( arg1, arg2, ) ;
82

Mthode qui affiche "Bienvenue au cours de Java".


public class Exemple1 {

Dclaration

static void bienvenue( ) { System.out.println("Bienvenue au cours de Java") ; }

public static void main (String args[])


{

Appel
}

bienvenue( ) ;

}
83

Mthode qui affiche "Tu as (n) ans" en ayant reu en argument une anne de naissance.
public class Exemple2 { static void afficheAge(int anaiss)

Dclaration

{ int age = 2009 - anaiss ; System.out.println("Tu as " + age + " ans") ; } public static void main (String args[]) {

Appel
} }

afficheAge(1983) ;

84

b) Mthodes fournissant un rsultat

Mthodes qui effectuent des actions et renvoient une valeur.

85

Syntaxe
Dclaration:

static type nom-mthode (liste d'argument ) { instructions ; return ; }


Appel: = nom-mthode (arg 1, arg2, ) ;

86

Mthode qui calcule la somme de 2 entiers reus en arguments.

public class Exemple3 { static int somme ( int a, int b ) { int calcul = a + b ; return calcul ; } public static void main (String args[]) {

Appel
} }

Dclaration

int resultat = somme (22, 8) ; ...

// rsultat rceptionn dans une variable...

87

2. Notion de classe
public class NomDeClasse { // Attributs et mthodes de la classe }

88

Exemple : soit une classe Point, destine manipuler les points d'un plan. - Un objet de type Point sera reprsent par 2 coordonnes entires : x et y (= attributs) ;

89

Il disposera aussi des 3 mthodes suivantes : - initialise : attribue les valeurs de dpart aux coordonnes du point ; - deplace : modifie les coordonnes du point; - affiche : affiche les coordonnes du point;

90

En notation UML, le diagramme de classe se prsenterait comme ceci :


Nom de la classe Attributs

Point - x : integer - y : integer + void initialise (integer, integer) + void deplace (integer, integer)

Mthodes

+ void affiche ()

91

class Point { private int x ; // abscisse private int y ; // ordonne public void initialise (int abs, int ord) { x = abs ; y = ord ; } public void deplace (int dx, int dy) { x += dx ; y += dy ; } public void affiche () { System.out.println ("Mes coordonnees:" + x + " " + y) ; } } (*)
92

Cette classe Point sert instancier (= crer) des objets de type Point et leur appliquer volont les mthodes disponibles ;
Pour faire appel une mthode de la classe : objet.mthode()

Nous pouvons utiliser la classe Point depuis la mthode main d'une autre classe ;

93

public class TstPoint { public static void main (String args[]) { Point a ; a = new Point() ; a.initialise(3, 5) ; a.affiche() ; a.deplace(2, 1) ; a.affiche() ; Point b = new Point() ; b.initialise(6, 8) ; b.affiche() ; } }
94

Que donnera l'excution de la classe TstPoint ?

95

3. Notion de constructeur

Dans la classe Point, il faut toujours commencer par la mthode 'initialise' ; Peu pratique ;

96

Un constructeur automatise ce mcanisme d'initialisation ;


Il est automatiquement appel lorsqu'on instancie un objet de la classe ; En Java, il porte le mme nom que la classe ;

97

Constructeur qui remplace la mthode 'initialise' public Point (int abs, int ord) { x = abs ; y = ord ; }

98

Changements dans la classe TstPoint


La commande suivante ne convient plus : Point a = new Point( ) ; Refuse par le compilateur : la cration d'un objet fait appel au constructeur. Celui prvu requiert 2 arguments, la commande devient : Point a = new Point (3, 5) ;

99

Autre changement

Il n'est plus ncessaire maintenant de faire appel la mthode initialise On obtient donc :

100

public class TstPoint { public static void main (String args[]) { Point a = new Point(3, 5) ; // Cette commande fait appel au constructeur...

a.affiche( ) ; a.deplace(2, 1) ; a.affiche( ) ;


Point b = new Point(6, 8) ; b.affiche( ) ; } }

101

Rgles concernant les constructeurs

Un constructeur ne renvoie aucune valeur, aucun type ne doit figurer devant son nom, pas mme void ;
Lorsqu'une classe ne comporte pas de constructeur, Java considre un constructeur vide sans arguments ;

102

Rgles concernant les constructeurs

Un constructeur doit tre dclar 'public' ;


Contrairement aux variables dclares dans un 'main', les champs d'un objet sont initialiss par dfaut : une boolenne false une donne numrique 0 un char vide
103

La cration d'un objet (commande 'new') s'effectue en 3 phases :

1) attribution de l'espace mmoire 2) appel du constructeur 3) renvoi de la rfrence de l'objet cr

104

4. Accesseurs et modificateurs

Java permet plusieurs types d'accs pour les attributs, mthodes et constructeurs d'une classe :
private : accessible uniquement ds la classe courante ; public : accessible dans toutes les classes ; (nant) : accessible par les classes du mme package ;
105

Protection des attributs d'un objet


Autant que possible, les attributs doivent tre 'private' ; Pour autoriser la lecture d'une variable, on lui associe un accesseur, d une mthode qui renvoie la valeur de la variable (exemple: getNom pour lire l'attribut nom) ; Pour autoriser la modification d'une variable, on lui associe un modificateur, d une mthode qui permet la modification tout en contrlant sa validit (exemple : setDate pour initialiser l'attribut date) ;
106

Exemple

Soit une classe 'Anne' qui contient un attribut entier 'an' ; Prvoir un constructeur qui initialise 'an' ; Prvoir un modificateur pour permettre par la suite la modification de l'attribut avec un contrle de validit (valeur comprise entre 1950 et 2007) ; Prvoir un accesseur pour permettre la lecture de son contenu ;
107

public class Annee { private int an; public Annee (int newAn) { an = newAn; } public void setAn (int newAn) { if (newAn >= 1950 && newAn <= 2007) an = newAn; } public int getAn () { return an; }

108

public class TestAn { public static void main (String args[]) { Annee a ;
a = new Annee(1987) ; System.out.println (An : + a.an); // erreur car an est private System.out.println (An : + a.getAn()); // OK car getAn() est public

109

5. Affectation et comparaison d'objets

Comme vu prcdemment, les variables de type classe contiennent des rfrences sur des objets ; Lorsqu'une affectation porte sur une variable de type classe, c'est la rfrence qui change et non l'objet lui-mme !!!

110

Exemple : Soit la classe Point qui possde un constructeur 2 arguments. Point a, b ;

a = new Point (3, 5) ;


b = new Point (2, 0) ; Aprs excution, on obtient en mmoire (*)
111

Si on veut tester si ces points sont gaux:

if (a == b) // NON car on teste les adressesmmoires des objets ! If (a.getX()==b.getX() && a.getY()==b.getY()) // en supposant quon ait cr des mthodes accesseurs

112

Si on excute l'instruction :
a=b; c'est la rfrence de a qui devient la rfrence de b ;

a et b dsignent donc le mme objet et il n'y a plus aucune rfrence vers le premier objet !!!
113

Il n'existe pas d'instruction qui permet de librer l'espace inutilisable car Java dispose d'un mcanisme de gestion automatique de la mmoire :

le GARBAGE COLLECTOR

114

Le garbage collector est une tche de la JVM qui :


travaille en arrire-plan ; libre la place occupe par les instances non rfrences ; compacte la mmoire occupe ;

Il intervient :

quand le systme a besoin de mmoire; ou, de temps en temps avec une priorit faible ;
115

6. Surdfinition ou surcharge

On parle de surcharge lorsque plusieurs constructeurs ou mthodes portent le mme nom ;

Dans ce cas, c'est la signature de la mthode qui permet au compilateur de faire la diffrence (= nombre et type d'arguments) ;

116

Exemple 1 : Surcharge de constructeur de la classe Point.


public class Point { private int x, y ; public Point (int abs, int ord) { x = abs ; y = ord ; } public Point () { x=0; y=0; } }

// Variables encapsules // Constructeur

// 2me constructeur

117

Lors de l'instanciation : Point a = new Point ( ) ; // Fait appel au 2me constructeur Point b = new Point (4, 6) ;

// Fait appel au 1er constructeur

118

Exemple 2 : Surcharge de la mthode "deplace" de la classe Point.


public void deplace ( int dx, int dy ) { x += dx ; y += dy ; } public void deplace ( int dx ) { x += dx ; } // deplace (int, int)

// deplace (int)

119

Lors de l'excution : Point a = new Point ( ) ; a.deplace(5) ; // Appelle deplace(int) a.deplace(2, 2) ; // Appelle deplace(int, int)
120

Nous avons dj rencontr la surcharge dans la classe Math

http://java.sun.com/

121

7. Variables et mthodes de classe


a)

Les attributs existent dans chacune des instances de la classe. On les appelle des variables d'instance. Soit la classe : class A { private int n; private float y ; }
122

Avec :

A a1 = new A( ) ; A a2 = new A( ) ;

On obtient le schma suivant : objet a1 n y n y |___| |___| |___| |___|

objet a2

123

Java permet de dfinir des variables de classe, elles n'existeront qu'en un seul exemplaire, quel que soit le nombre d'objets instances de la classe ;
Il suffit de les dclarer avec l'attribut 'static' ;

Exemple : classe avec un champs statique destin contenir le nombre d'objets dj crs ;
124

class Obj { private static int nb = 0 ; public Obj() { nb++ ; System.out.println ("Il y a " + nb + " objet(s)") ; } } public class TstObj { public static void main (String args[ ]) { Obj a = new Obj( ) ; Obj b = new Obj( ) ; Obj c = new Obj( ) ; } } Qu'affichera ce programme ?
125

b) De manire analogue, certaines mthodes peuvent avoir un rle indpendant d'un quelconque objet ; Une telle mthode est dite mthode de classe ; Elle ne pourra agir que sur des variables de classe, puisque par nature elle n'est lie aucun objet en particulier ;

126

class Obj { private static int nb = 0 ; public Obj( ) { nb++ ; } // Constructeur

// Mthode de classe : statique public static int getNb () { return nb ; } }


127

public class TstObj2 { public static void main (String args[]) { Obj a = new Obj() ; Obj b = new Obj() ; Obj c = new Obj() ; System.out.print ("Nbre d'objets = " + Obj.getNb( ) ) ; /* Ici pour faire appel la mthode getNb, on ne mentionne pas un nom d'objet particulier car la mthode est statique... on l'appelle avec Obj.getNb() !!! */ } }
128

Pour faire appel une variable de classe ou une mthode de classe, il n'est pas ncessaire d'instancier un objet de la classe concerne, il suffit de mentionner : NomDeClasse.variableDeClasse ou NomDeClasse.mthodeDeClasse( ) ;

129

En notation UML, le diagramme de classe de la classe Obj se prsenterait comme ceci :

Obj -$ int nb=0 + Obj () +$ int nbObj ()

Nom de la classe Attributs

Mthodes

130

Vous avez dj, au cours des labos prcdents, manipul des variables et des mthodes statiques sans vous en rendre compte Avez-vous une ide desquelles ?
(*)
131

Exercices
1) Parmi les attributs suivants de la classe Renault Espace, la version avec toutes les options possibles, distinguez ceux que vous dclareriez comme statiques des autres :

nombre de passagers vitesse maximale nombre de vitesses couleur

capacit du rservoir ge prix

132

2)

Une erreur s'est glisse dans le code suivant, laquelle ?

class Test { private int a ; public Test (int b) {a=b;} } public class PrincipalTest { public static void main (String args[]) { Test unTest = new Test ( ) ; } }
133

3)

Une erreur s'est glisse dans le code suivant, laquelle ? class Test { private int a ; private int c ; public Test (int b) {a=b;} public static int getC() { return c ; } } public class PrincipalTest { public static void main (String args[]) { Test unTest = new Test (5) ; } }
134

VII. Les tableaux

En Java, ce sont des objets ; Il faut donc utiliser des mthodes pour y accder ; Le 1er lment a pour indice 0 ;

135

1. Dclaration

type nom-du-tableau [ ] ; type [ ] nom-du-tableau ;

// Pas de dimension !!!

Les lments d'un tableau peuvent tre de type primitif ou de type objet ;

Exemples : int tab[ ] ; Point tabPoints[ ] ;

136

On cre un tableau comme on cre un objet : avec l'oprateur "new"

int tab[] ; tab = new int [5] ;

/* rfrence un tableau de 5 entiers */

On peut excuter les 2 instructions en 1 fois :

int tab[ ] = new int [5] ;

137

2. Dclaration avec initialisation


int tab1[] = {1, 8, 5, 6} ; int tab2[] = {n, n+2} ; char tab3[] = {'a', 'b', 'c'} ;

// tableau de 4 entiers // tableau de 2 entiers // tableau de 3 caractres

La notation {} ne peut tre utilise que lors de la dclaration, par la suite il faut initialiser les lments un par un

138

3. Utilisation d'un tableau


tab[0] = 15 ; tab[2]++ ;
// place 15 dans le 1er lt // incrmente le 3me lt // affiche le 5me lt

System.out.print (tab[4]) ;

Remarque : Si la valeur de l'indice est incorrecte, on obtient une erreur d'excution ;


139

4. La taille d'un tableau

La variable 'length' retourne le nombre d'lments d'un tableau ; Exemple : Parcours d'un tableau
for (i = 0 ; i < tableau.length ; i++) { }

Remarque : on crit tableau.length sans parenthses car length est un champ public de l'objet tableau et non une mthode
140

5. Exercices
Que donne l'excution du code suivant ?
public class Affectation { public static void main (String args[]) { int i ; int t1[] = {1, 2, 3} ; int t2[] = new int[5] ; for (i=0 ; i<5 ; i++ ) t2[i] = 2*i ; t2 = t1 ; for (i=0 ; i<t2.length ; i++) System.out.println (t2[i]) ; } }
141

Quelles sont les erreurs commises ici ?


public class Erreurs { public static void main (String args[]) { final int n = 10 ; int t1[] = { 1, 3, 5 } ; int t2[] ; t2 = { 5, 8, 3 }; float t3[] = { 2, 3.5, 4 } ; double t4[] = { 2, 3.5 , 4, n++ } ; } }
142

6. Passage des paramtres


a) Lorsqu'on transmet une variable de type primitif en argument, on envoie en fait une copie de la valeur de la variable (=passage par valeur) :
public class TransmPrimitif { public static void main(String[] args) { int i = 5 ; modifVariable(i) ; System.out.println("Aprs la procdure : " + i) ; } static void modifVariable(int k) { System.out.println("Avant la modif : " + k) ; k = 10 ; System.out.println("Aprs la modif : " + k) ; } }
143

Laffichage donnera :
Avant la modif : 5 Aprs la modif : 10
(k est garnie avec la valeur reue en argument) (on a modifi le contenu de la variable locale k qui est dtruite en sortant de la procdure)

Aprs la procdure : 5 (la variable dorigine na pas boug)

144

b)

Lorsqu'on transmet un tableau en argument, on envoie la rfrence du tableau (= son adresse), la mthode agit alors directement sur le tableau concern et non sur une copie (=passage par rfrence) public class TransmReference { public static void main(String[] args) { int t[] = {4,8} ; modifTab(t); // On envoie l'adresse du tableau... System.out.println(t[0]) ; } static void modifTab (int tab[]) { tab[0] = 3 ; System.out.println(tab[0]) ; } }
145

7. Les tableaux d'objets


Rappel : un tableau est un objet

Il faut l'intancier avec la commande 'new'


Lorsque l'on cre un tableau de type primitif, il suffit donc d'instancier le tableau (d initialiser la rfrence vers le tableau). Lorsqu'on cre un tableau d'objets, il faut non seulement instancier le tableau, mais aussi chacun de ses lments qui sont en ralits des pointeurs !
146

public class TabPoint { public static void main (String args[]) { Point t1[]; // dclaration du tableau t1 = new Point[3]; // cration du tableau t1[0] = new Point(2,7); // cration des 3 points t1[1] = new Point(4,21); t1[2] = new Point(11,3); for (i=0 ; i<t1.length ; i++) t1[i].affiche() ;// affichage des 3 points }
}
147

VIII. Les chanes de caractres

En Java, une chane de caractres est un objet ; Java propose plusieurs classes apparentes aux chanes de caractres :

la classe String = chanes de caractres non modifiables ; la classe StringBuffer = chanes de caractres modifiables volont ;
148

1. La classe String

Cette classe comporte 11 constructeurs et plus de 40 mthodes ;

149

Dclaration :
String prnom = new String ("Cline") ;

ou
String prnom = "Cline" ;

150

Comparaison :
String prnom = new String ("Hugo") ; String autrePrnom = new String ("Hugo") ; if (prnom == autrePrnom) System.out.println ("Vrai") ;

else
System.out.println ("Faux") ; Qu'affichera cette squence d'instructions ?

151

Pour vrifier l'galit entre 2 chanes :


if (prnom.equals(autrePrnom)) System.out.println ("Prnoms identiques") ;

else
System.out.println ("Prnoms diffrents") ;

152

Remarque :

Impossible d'utiliser les oprateurs < <= > >=

pour comparer des chanes de caractres : Erreur de compilation

153

La mthode "compareTo" renvoie


0 si les 2 chanes sont gales ; -1 si la 1re est infrieure la 2me ; 1 si la 1re est suprieure la 2me ;

switch (prnom.compareTo(autrePrnom)) { case 0 : System.out.print("Identiques"); break ; case -1 : System.out.print(prnom + " infrieur " + autrePrnom) ; break; case 1 : System.out.println (prnom + " suprieur " + autrePrnom) ; break ; }

154

Concatnation :
String identit = prnom.concat(nom) ;

ou
String nom = " Julien " + " Decroix" ;

155

Un objet de type String ne peut tre modifi Si on crit :


String msg = "Bonjour" ; msg = "Nouveau message" ;

L'ancienne chane "Bonjour" ne sera plus rfrence et un nouvel objet String est cr ;

156

Extraction de sous-chane :
String msg = "Bienvenue ici" ; String extrait = msg.substring(4, 8) ;

envoie la chane "venu" dans extrait ;

Une surcharge de cette mthode permet galement d'extraire des caractres partir de jusqu'au bout de la chane :
String fin = msg.substring (4) ; envoie la chane "venue ici" dans fin ;

157

Longueur d'une chane :


String msg = "Bienvenue" ; System.out.println (msg.length() + " caractres") ;

affiche "9 caractres"

Extraction d'un caractre :


char lettre ; String msg = "Bravo" ; lettre = msg.charAt(3) ;

envoie dans lettre le 4me caractre de msg (ici "v") ;


158

Mthodes de conversions :
toLowerCase() : convertit une chane en minuscules ;

toUpperCase() : convertit en majuscules ;


trim() : cre une nouvelle chane en supprimant les espaces au dbut et la fin ; replace(oldChar, newChar) : remplace toutes les occurrences de oldChar par newChar ; replaceAll(oldString, newString) : remplace les occurrences de oldString par newString ;
159

Rappel :
Ces mthodes de conversion provoquent la cration d'une nouvelle chane puisque les objets de la classe String ne peuvent tre modifis

160

2. La classe StringBuffer

Un StringBuffer peut tre utilis partout o un String l'est ; Il est plus flexible puisqu'il peut tre modifi ;

161

2. La classe StringBuffer
Voici quelques-unes de ses mthodes :
append charAt insert replace setCharAt . capacity . delete . length . reverse . substring

Vous trouverez tous les dtails dans l'aide Java ;

162

Dclaration :
StringBuffer a = new StringBuffer () ;
chane vide d'une capacit initiale de 16 caractres

StringBuffer b = new StringBuffer(10) ;


chane vide de 10 caractres

StringBuffer c = new StringBuffer("Titre") ;


chane de 16 caractres + la longueur de la chane reue en paramtre

163

Utilisation :
StringBuffer strBuff = new StringBuffer () ;

strBuff.append ("Cours") ;
strBuff.append (" de Java") ; strBuff.insert (9, "HTML et ") ;

Un StringBuffer volue dynamiquement : si on augmente la longueur de son contenu, l'espace mmoire allou augmente automatiquement.

164

capacity() : retourne le nombre de caractres qu'un StringBuffer peut recevoir ; length() : retourne le nombre de caractres effectivement placs dans le StringBuffer ; setLength(int) : lui attribue une longueur ; si elle est plus courte que son contenu, la fin sera tronque ; si elle est plus longue, son contenu est complt par des caractres nuls ('\u000') ;

165

IX. L'hritage

Principe : rcuprer du code existant pour le modifier en partie avant de le rutiliser ;

Pourquoi ? Pour raccourcir les temps dcriture et de mise-au-point dune application ;

166

L'hritage permet de dfinir une classe drive partir d'une classe existante ; La classe drive hrite des champs et mthodes de la classe de base ;

Pas d'hritage multiple en Java : une classe peut hriter d'une seule autre ;

167

1. Gnralisation - spcialisation

Le mot-cl extends indique la classe-mre :


class Voiture extends Vehicule { } class Velo extends Vehicule { } class VTT extends Velo { }

On dit quune classe-fille (ou sous-classe) spcialise sa classe-mre (ou super-classe) ; Tandis quune classe-mre gnralise sa classefille ;
168

Que peut faire une sous-classe ?


La classe qui hrite peut :

Ajouter des mthodes, des variables et des constructeurs ; Surcharger des mthodes ; Redfinir des mthodes ;

169

Exemple : la classe Point


class Point {

private int x, y ;
public void initialise (int a, int b) { x=a;y=b; } public void deplace (int dx, int dy) { x += dx ; y += dy ; } public void affiche () { System.out.println ("Je suis en " + x + " " + y) ; } }
170

Exemple : la classe Point


class Point {
-

private int x, y ;
public void initialise (int a, int b) { x=a;y=b; } public void deplace (int dx, int dy) { x += dx ; y += dy ; } public void affiche () { System.out.println ("Je suis en " + x + " " + y) ; } }

Imaginons que nous ayons besoin d'une classe Pointcol, destine manipuler des points colors d'un plan ; Elle disposera des mmes fonctionnalits que Point et une mthode "colore" charge de dfinir la couleur ;

- Elle hritera donc de Point ;

171

Exemple : la classe Point


class Point {
class Pointcol extends Point

private int x, y ;
public void initialise (int a, int b) { x=a;y=b; } public void deplace (int dx, int dy) { x += dx ; y += dy ; } public void affiche () { System.out.println ("Je suis en " + x + " " + y) ; } }

{ private byte couleur ; public void colore (byte couleur) { this.couleur = couleur ; } }

172

Nous pouvons maintenant dclarer des variables de type Pointcol : public class TestPointcol // Classe utilisant Pointcol { public static void main (String args[]) { Pointcol pc = new Pointcol() ; pc.initialise (3, 5) ; // Mthode de la classe de base pc.colore ((byte)3) ; // Mthode de la sous-classe pc.deplace (2, -1) ; pc.affiche() ; } }

173

Remarque
Si on veut ajouter Pointcol une mthode affichec fournissant la fois les coordonnes du point et sa couleur, ceci ne sera pas permis :
public void affichec () { System.out.println ("Je suis en " + x + " " + y) ; System.out.println ("Ma couleur est " + couleur) ;}

174

Remarque
Pour crire la mthode affichec, on peut s'appuyer sur la mthode affiche de Point :
public void affichec () { affiche() ; // Equivalent this.affiche() ; System.out.println ("Ma couleur est " + couleur) ; }

175

2. Hritage et constructeurs

Si un constructeur d'une classe drive n'appelle pas le constructeur de sa classe de base, c'est le constructeur sans argument de celle-ci qui sera d'abord excut, puis celui de la classe drive ;

176

Exemple 1
class Mere { public Mere() { System.out.println ("Constructeur mre") ; } } class Fille extends Mere { public Fille() // Pas d'appel explicite : appel par dfaut { System.out.println ("Constructeur fille") ; } } public class TestFille { public static void main (String args[]) { Fille a = new Fille() ; } }

Qu'affichera l'excution du programme ?


177

Si un constructeur d'une classe drive appelle un constructeur de sa classe de base, il doit obligatoirement s'agir de la premire instruction du constructeur et ce dernier est dsign par le mot-cl super ;

178

Exemple 2
class Mere { private String prenom ; public Mere(String prenom) { this.prenom = prenom ; } } class Fille extends Mere { public Fille(String nom) { super (nom) ; // Appel explicite du constructeur System.out.println ("Constructeur fille") ; } } public class TestFille { public static void main (String args[]) { Fille a = new Fille("Cline") ; } }

179

3. Modificateurs de visibilit

Rappel
Une classe possde 2 degrs de visibilit : - public : - (nant) : accessible partout ; accessible par les classes du package ;

180

3. Modificateurs de visibilit

Un attribut ou une mthode possdent 4 degrs de visibilit :


public : accessible partout ; (nant) : accessible par les classes du package ; protected : accessible par les classes du package et les classes drives ;

private : accessible uniquement dans sa propre classe ;

181

4. Redfinition et surcharge

Surcharge = plusieurs mthodes qui portent le mme nom mais qui ont une signature diffrente ; Elles peuvent se trouver dans la mme classe ou dans une classe et ses descendantes ;

182

public class A { public void methodeX(int i) { } }

Surcharge public class B extends A { public void methodeX(double i) { } } B possde 2 mthodes


183

Redfinition = possibilit de redfinir dans une sous-classe une mthode qui existe dj dans la super-classe (mme signature) ; L'interprteur cherche la mthode invoque partir de la classe concerne et remonte jusqu' la premire rencontre ;

184

public class A { public void methodeX(int i) { } }

Surcharge public class B extends A { public void methodeX(double i) { } } B possde 2 mthodes

Redfinition public class C extends A { public void methodeX(int k) { } } C possde 1 seule mthode
185

Exemple de redfinition

On considre 2 classes lies par hritage :

class Employe { }

class Representant extends Employe { }

La classe Reprsentant redfinit la mthode calculSalaire dj dcrite pour un employ ;

186

class Employe { private String nom ; protected float salaire ; public Employe (String nom, float salaire) { this.nom = nom ; this.salaire = salaire ; } public float calculSalaire () // pour calculer le salaire { float sal = salaire * 0.85f ; // 15 % de prcompte... return sal ; } }

187

class Representant extends Employe // Classe qui hrite de Employe { private float chAff ; public Representant (String nom, float salaire, float chAff) { super (nom, salaire) ; this.chAff = chAff ; } public float calculSalaire () // Redfinition de la mthode // calculSalaire de la super-classe { float salRepr = super.calculSalaire() + (chAff * 0.1f) ; return salRepr ; } }

188

public class RepresentantEmploye { public static void main(String args[]) { Employe moi = new Employe ("Desmarets", 1000) ; Representant toi = new Representant ("Dubois", 1000, 3000) ; System.out.println ("Je gagne " + moi.calculSalaire() + " comme employe") ; System.out.println ("Tu gagnes " + toi.calculSalaire() + " comme representant") ; } }

189

5. Polymorphisme

Vient du grec et signifie : qui peut prendre plusieurs formes. En POO : aptitude d'un mme message dclencher des oprations diffrentes, selon l'objet auquel il est destin ;

190

Exemple :
int type ; float salaire ; Employe e ; System.out.print ("Type ? (1:Employe - 2:Representant) ") ; type = Clavier.lireInt() ; if (type == 1) { e = new Employe("Dupond", 1000) ; } else { e = new Representant("Dupond",1000, 3000) ; } System.out.println ("Salaire : " + e.calculSalaire() + " euros") ;

191

Exemple :
int type ; float salaire ; Employe e ;

/* Obligation de dclarer la rfrence la classe de base ici !!! */ System.out.print ("Type ? (1:Employe - 2:Representant) ") ; type = Clavier.lireInt() ; if (type == 1) { e = new Employe("Dupond", 1000) ; } else { e = new Representant("Dupond",1000, 3000) ; } System.out.println ("Salaire : " + e.calculSalaire() + " euros") ;

192

A l'excution du programme, le code de la mthode "calculSalaire" lancer est dtermin suivant la classe de l'objet !!! Pour utiliser le polymorphisme, il faut runir les conditions suivantes :

Avoir une arborescence d'hritage ; L'utiliser par une rfrence d'objet de la classe de base ; Avoir 2 mthodes de mme signature dfinies l'une dans la classe de base, l'autre dans la classe drive ;

193

Remarque
Et si, pour un reprsentant, on veut faire ensuite appel une mthode propre la sous-classe ?
e.methPropreRepr() ; // Erreur de compilation

Solution : cast vers un objet de la sous-classe


((Representant)e).methPropreRepr() ; // OK

194

6. Classes et mthodes finales

Le mot-cl 'final', appliqu une variable, empche sa modification aprs une premire initialisation ; Une mthode dclare 'final' ne peut tre redfinie dans une classe drive ; Une classe dclare 'final' ne peut tre drive ;

195

7. Les classes abstraites

Une classe abstraite est une classe incomplte ;


Certaines de ses mthodes ne contiennent pas d'instructions ; Comme elle est incomplte, elle ne peut tre instancie et doit tre hrite ;

196

7. Les classes abstraites

Intrt ?

On peut placer dans une classe abstraite toutes les fonctionnalits dont on veut disposer dans ses descendantes :

Les mthodes et les champs communs seront implments compltement ;


Les mthodes qui doivent exister mais de manire diffrente selon le cas seront dclares abstraites ;

197

Exemple
abstract class Employe { public void engager( ) { System.out.println("Pot daccueil"); } public abstract void licencier( ) ; // pas d'instruction, juste '; } class Ouvrier extends Employe { public void licencier() { System.out.println("Dehors !") ; } } class Patron extends Employe { public void licencier() { System.out.println("Vous comprendrez que dans la conjoncture actuelle ... ") ; } }

198

Autre exemple

Voir feuille Lien vers l'exemple

199

8. Les interfaces

Nous venons de voir qu'une classe abstraite permet de dfinir dans une classe de base des fonctionnalits communes toutes ses descendantes, tout en leur imposant de redfinir certaines mthodes ;
Si l'on considre une classe abstraite n'implmentant aucune mthode et aucun champs, on aboutit la notion d'interface ;

200

8. Les interfaces

La notion d'interface est cependant plus riche qu'un cas particulier de classe abstraite :

une classe ne peut hriter que d'une seule autre ; une classe peut implmenter plusieurs interfaces ;

201

Dfinition d'une interface


public interface I { public abstract void f(int n) ; public abstract void g() ; }

Uniquement des mthodes abstraites et le motcl interface remplace class

202

Implmentation d'une interface


public class A implements I { // A doit dfinir les mthodes f et g de l'interface I }

Remarque : on hrite (extends) d'une classe mais on implmente (implements) une interface !!!

203

Implmentation d'une interface


Une mme classe peut implmenter plusieurs interfaces :
public interface I1 { void f() ; // public et abstract facultatifs } public interface I2 { void h() ; } class B implements I1, I2 { // B doit obligatoirement dfinir les mthodes de I1 et de I2 }

204

9. La classe Object

En Java, toutes les classes hritent de la classe java.lang.Object ;

elle ne contient aucune variable d'instance ni variable de classe ; elle fournit plusieurs mthodes qui sont donc disponibles pour toutes les classes ;

205

9. La classe Object

toString() : renvoie une description de l'objet sous forme de chane (type & adresse) ; clone() : cre et renvoie une copie de l'objet (mthode protected !) ; equals(objet) : indique si un autre objet est gal celui-ci ;

206

X. Les exceptions
Intrt ? Traiter un fonctionnement anormal d'une partie de code (erreur, cas exceptionnel) ;

Traitement des erreurs spar du traitement normal ;

207

Sans exception
// Insertion d'un livre la nime place d'une tagre int n ; n = Clavier.lireInt() ; if (n " est un nombre valable" ) { if (" tagre n'est pas remplie" ) { etage.add(livre,n) ; // Le traitement "normal" est noy } // dans les traitements d'erreurs else { System.out.println("Etagre pleine)" ; } else { System.out.println("Mauvais n de livre") ; }

// 2 traitements d'erreurs

208

Avec exception
int n ; try { }

n = Clavier.lireInt() ; etage.add(livre,n) ;

catch(NumberFormatException e) { System.out.println("Mauvais n de livre") ; } catch(EtagerePleineException e) { System.out.println("Etagre pleine)" ; }


209

X. Les exceptions
Java fournit de nombreuses classes drives de la classe Exception : - les exceptions standard ou implicites qui ne doivent tre mentionnes dans une clause throw ; - les exceptions explicites qui doivent tre traites par une mthode ou tre mentionnes dans la clause throws ;
210

a) Exceptions standard
Exemple :

211

public class ExcStd1 { public static void main (String args[]) { int t[] ; System.out.print ("Taille ? ") ; int n = Clavier.lireInt() ; t = new int[n] ; System.out.print ("Indice : ") ; int i = Clavier.lireInt() ; t[i] = 12 ; for (i=0 ; i<n ; i++) { System.out.println (t[i] + " ") ; } }

Quelles erreurs d'excution pourraient survenir ici ?

212

public class ExcStd1 { public static void main (String args[]) { try { int t[] ; System.out.print ("Taille ? ") ; int n = Clavier.lireInt() ; t = new int[n] ; System.out.print ("Indice : ") ; int i = Clavier.lireInt() ; t[i] = 12 ; for (i=0 ; i<n ; i++) { System.out.println (t[i] + " ") ; } } catch (NegativeArraySizeException e) { System.out.println ("Exception taille tableau negative : " + e.getMessage() ) ; } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Exception indice tableau : " + e.getMessage() ) ; } } }

213

IMPORTANT La mthode getMessage( ) de la classe Exception retourne le message associ l'instance de l'exception leve

214

Exercice :

Calculer et afficher la moyenne d'une srie de nombres entrs au clavier (dernier = 0)

public class ExcStd2 { public static void main (String args[]) { int somme=0, cpt=0, nb, moy ; nb = Clavier.lireInt() ; while (nb != 0) { somme+=nb ; cpt++ ; nb = Clavier.lireInt() ; } try { moy = somme / cpt ; System.out.println ("La moyenne vaut " + moy) ; } catch (ArithmeticException e) { System.out.println ("Erreur : " + e.getMessage() ) ; } } }

215

b) Exceptions explicites
Base de la gestion d'exception : - dclencher une exception ; - la traiter dans un gestionnaire ; Exemple : Dclenchement d'une exception non standard avec throw

216

class Point { public Point(int x, int y) throws ErrConstr /* Mthode susceptible de dclencher une exception de type ErrConst */ { if ( (x<0) || (y<0)) throw new ErrConstr() ; // Ici je lance l'exception... this.x = x ; this.y = y ; } public void affiche() { System.out.println ("coordonnees : " + x + " " + y) ; } private int x, y ; }
class ErrConstr extends Exception /* Java impose que cette classe {} hrite de la classe standard Exception !!! */

217

public class Except1 { public static void main (String args[]) { try { Point a = new Point (1, 4) ; a.affiche() ; a = new Point (-3, 5) ; // Instr qui va provoquer l'exception... a.affiche() ; } catch (ErrConstr e) { System.out.println ("Erreur construction ") ; System.exit (-1) ; } } }

218

Bloc finally

Contient un traitement qui sera excut de toute faon, exception ou pas


try { } catch { } finally { } // Code susceptible de lever une exception

// Traitement de l'exception

// Instruction excuter dans tous les cas

219

You might also like