Java
Java
Java
Le langage JAVA
Sommaire
Les concepts Objet Classes, mthodes, attributs Hritage, polymorphisme, encapsulation Les interfaces Les classes de base Les exceptions Les entres-sorties
Introduction Java
Introduction Java
Origine du langage
Dvelopp par SunSoft pour raliser le dveloppement de systmes embarqus Projet Oak volution gre par JavaSOFT (SunSoft) Quelques liens
http://www.javasoft.com/ http://www.sunsoft.com/ http://www.developer.com/directories/pages/dir.java.htm/ (anciennement www.gamelan.com) http://www.javaworld.com/ http://tips.iworld.com/ slectionnez Java
4
Introduction Java
Java est simple Simplicit relative par rapport au C++ Certains concepts du C++ lorigine de nombreux bugs ont t supprims
Pointeurs Surcharge des oprateurs
Introduction Java
Toute ligne de code JAVA se trouve obligatoirement dans une mthode lintrieur dune classe
Java est un langage intermdiaire entre les langages statiques (C++) et les langages interprts (SmallTalk) Nombreuses classes permettant le dveloppement de systmes rpartis
Classes daccs aux ressources dun serveur Web
6
Introduction Java
Introduction Java
Etre vrifiable
Le byte code est excut par un logiciel : la Machine virtuelle La machine virtuelle est dpendante de la plate-forme
Introduction Java
Prog.class MV
Code binaire
Systme dexploitation
Systme dexploitation
Systme dexploitation
9
Introduction Java
Introduction Java
JAVA supporte le multi-threading La gestion des multi-threads est intgre dans le langage et dans la Machine Virtuelle Grande simplification Java permet de synchroniser les threads
Multi-processus
Mmoire
Multi-thread
Mmoire
P1
Inter-process
P2
T1
Synchronisation
T2
11
Introduction Java
Il contient :
Un ensemble de classes de base regroupes en packages
Interface utilisateur, conteneurs, gestion des threads, rseau
Des excutables : machine virtuelle, compilateur Des bibliothques permettant de coupler du Java et du C
12
Introduction Java
Loffre actuelle
Jbuilder 4 (Inprise) Visual J++ (Microsoft) Visual Age (IBM) Visual Cafe Pro
13
Introduction Java
Rseau
Sockets (serveurs, clients), Web (URL), Applet
Entre-sortie
Fichier, Pipe, accs direct
Classes de base
Conteneurs, date, Chane de caractres
RMI
Remote Method Invocation
Middleware objet 100 % java
14
Introduction Java
Beans
Composant Java
Scurit
Cryptage, identification, signature
Internationalisation
Format de date/heure messages localiss caractres UNICODE 2
JavaIDL
Support de CORBA
15
Introduction Java
Hello Word
class Hello { int k = 5; public static void main (String argv[]) { Hello hello = new Hello(); for (int I = 0; I < hello.k; I++) hello.SayHello(); } public void SayHello() { System.out.println("Hello Java World !!! "); } }
La syntaxe
17
La syntaxe
Constitution dun programme Un programme Java utilise un ensemble de classes Les classes sont regroupes par package Une classe regroupe un ensemble dattributs et de mthodes
Package Classe Attributs Mthodes
18
La syntaxe
Dclaration dune classe Le nom de la classe est spcifi derrire le mot cl class Le corps de la classe est dlimit par des accolades On dfinit dans le corps les attributs et les mthodes qui constituent la classe
class Test {
19
La syntaxe
La syntaxe
Bloc dinstructions Un bloc dinstructions est dlimit par des accolades Il contient un ensemble dinstructions Toute instruction est termine par un point virgule Un bloc dinstructions peut contenir dautres blocs dinstructions
{ int i = 0; if (i==0) System.out.println ("Valeur de i : " + i); }
21
La syntaxe
Instructions possibles Dclaration dune variable Appel de mthode Affectation Instruction de boucle (while, for)
22
La syntaxe
Corps dune mthode Le corps dune mthode est un bloc dinstructions Le mot cl return permet de renvoyer une valeur lappelant de la mthode Il doit renvoyer une valeur du mme type que le type de retour de la mthode
class Test { int calculer (int taux, float delta) { return taux * delta; } }
23
La syntaxe
Dclaration dune variable Une variable possde un type et un nom Le type peut tre un type de base ou une classe Linitialisation dune variable peut se faire au moment de la dclaration
{ int compteur; int indice = 0;
24
La syntaxe
Porte dune variable La porte dune variable stend jusqu la fin du bloc dans lequel elle est dfinie
25
La syntaxe
La syntaxe
Point dentre Une application possde un point dentre fourni par la mthode main (sauf les applets) Attention la casse, Java est sensible aux majuscules/minuscules
class Test { public static void main (String[] args)) { // corps de la mthode main } }
27
La syntaxe
Type caractre
char 16 bits non sign UNICODE2 deux valeurs possibles : true ou false
28
Type boolen
boolean 1 bit
La syntaxe
Les diffrents types de base (2/2) Les types de base scrivent en minuscules (int, float..) Le type int est cod sur 4 octets portabilit Le type char est cod sur 2 octets pour supporter les jeux de caractres Unicode Une chane de caractres est dclare avec le motcl String
Ce nest pas un type de base Il se manipule comme un type de base Ce nest pas quivalent un tableaux de caractres
String s = "Hello World"
29
La syntaxe
Laffectation Loprateur = permet daffecter la valeur de lexpression qui est droite la variable qui est gauche
class Test { int calculer () { int i = 0; int j = 6; i = (j + 5) * 3; return i + j; } }
30
La syntaxe
x x y y
= y * z ; += 2 ; = x / 4 ; =x % 2 ;
6 8 2 0
Les oprateur = et += peuvent tre utiliss sur des variables de type String En terme de performance, il est recommand dutiliser la notion raccourcie
31
La syntaxe
La syntaxe
Oprateurs de comparaison Sappliquent sur des entiers, boolens, rels ==, !=, <=, >, >= Ces oprateurs retournent une valeur du type boolean
33
La syntaxe
Retournent un type boolean & renvoie true si les deux expressions renvoient true && a le mme comportement mais nvalue pas le seconde expression si la premire est false | renvoie true si lune des deux expressions renvoie true || a le mme comportement mais nvalue pas le seconde expression si la premire est true
34
La syntaxe
La syntaxe
i = s;
// appel de la mthode int obj.m(int i) obj.m(s); // short int (appel de mthode) // division dun entier et dun flottant : lentier i est // converti en flottant, puis la division flottante est calcule f = i / (double)j; // f vaut 0.3333
36
La syntaxe
Test conditionnel
class Test { public static void main (String args[]) { int compteur = 0; boolean debut; if (compteur == 0) { debut = true; System.out.println("Dbut de la partie"); } else if (compteur ==10) System.out.println("Fin de la partie");
else
System.out.println("Partie en cours"); } }
37
La syntaxe
Boucles while
class Test { public static void main (String args[]) { int i; do { System.out.println("Entrez un nombre < 10"); c= lireUnInt(); } while (c>10); while (c>0) afficher (c--); } public static int lireUnInt() {}
38
La syntaxe
Boucles for
class Test { public static void main (String args[]) { int i; for (i=0 ; i <=5 ; i++) { System.out.println (i); } for (j=0 ; j <=5 , j++) { System.out.println (i); }
39
La syntaxe
Switch
class Test { public static void main (String args[]) { char c = (char)System.in.read(); switch(c) { case o : case O : System.out.println("Oui"); break; case n : case N : System.out.println("Non"); break; default : System.out.println("Mauvaise rponse"); break; }
}
}
La syntaxe
Commentaires (1/2) Lutilisation de commentaires est fortement recommand /*ceci est un commentaire sur plusieurs lignes */ //ceci est un commentaire sur une ligne Javadoc (fourni dans le JDK) gnre la documentation des classes en au format HTML
/** : dbut de commentaire Javadoc @author : exemple de tag auteur */ : fin de commentaire Javadoc
41
La syntaxe
Les tableaux : description Nombre fixe dlments. Taille fixe la construction Les lments sont de mme type (type de base ou classe) Les tableaux sont allous dynamiquement par new Un tableau est dtruit lorsquil nest plus rfrenc Les tableaux multi-dimensionnels sont des tableaux de tableaux
42
La syntaxe
43
La syntaxe
Les tableaux : initialisation Lattribut length renvoie la dimension du tableau Lindice des lments du tableaux varie de 0 tableau.length 1 Initialisation statique :
int[] monTableau = {1, 2, 3};
Initialisation dynamique :
int[] param = new int[10]; for (int i = 0; i < param.lenght ; i++) param[i]= i;
44
45
Les concepts de base Les concepts de base de lobjet sont simples et peu nombreux
Objet et Classe Encapsulation Gnralisation/Spcialisation Polymorphisme
Ces concepts impactent directement sur la qualit, les dlais et les cots de dveloppement et de la maintenance des logiciels Il existe de nombreux autres concepts, mais non fondamentaux Les concepts de base sont simples, mais leur utilisation sur un projet demande de lexprience
46
Quest-ce quun objet ? Cest une abstraction dune entit du monde rel
Monde rel Modle Voiture
Simulateur de circulation
Abstraction
Abstraction
Voiture Bote
Conception de voiture
47
Moteur
Rgle dor : en cas de doute sur la pertinence dune classe, il est prfrable de ne pas la dfinir
La gnralisation est caractris par lexpression : est un type de
48
Classes abstraites
Moyen de transport
<<extends>>
Classes concrtes
Tracteur
Train
Voiture
Monde rel
49
Attribut, Opration, Identit ? Attribut : valeur porte par un objet Opration : service rendu par lobjet
Synonyme : Mthode, Service
50
Attribut, Opration, Identit (2/2) Une classe dcrit les Attributs, les Oprations et lIdentit de ses objets
Voiture
Bmw :Voiture
Instance de
couleur=rouge vitesseMax=230
Twingo : Voiture
Instance de
couleur=jaune vitesseMax=140
51
Accs aux attributs et invocation des mthodes Laccs aux attributs et aux mthodes dfinis dans la classe se fait partir dun objet Un objet est une instance de classe Il possde des valeurs propres pour les attributs dfinis dans la classe
Voiture clio; clio = new Voiture(); // Dclaration dune variable // Cration de lobjet
clio.couleur = rouge ;
clio.demarrer();
// Accs lattribut
// Appel de la mthode
52
void accelerer (float delta) { consommation = consommation + delta / 10; vitesse = vitesse + delta; } } // Utilisation dun objet Voiture clio = new Voiture(); clio.accelerer(20);
Passage du paramtre
53
Les Associations (1/2) Lassociation est le lien qui peut exister entre objets de diffrentes classes pour leur permettre de communiquer Deux objets sont associs si :
Un objet connat lidentit et la classe dun (ou de plusieurs) autre objet
Voiture
Personne
Roue
Carroserie
55
Lhritage Mcanisme provenant dune relation de Gnralisation/Spcialisation Une sous-classe hrite des attributs, mthodes et associations de ses super classes
MoyenDeTransport couleur vitesse demarrer() arreter()
Voiture typeCarrosserie
Moto typeDePot
marcheArriere()
faireUneRoueAvant()
56
Quest-ce que lencapsulation ? Un mcanisme permettant de masquer les choix dimplmentation Permet de changer limplmentation sans incidence sur le reste du systme si linterface nest pas modifie Un objet possde une interface publique et une implmentation prive Chaque objet est un mini-serveur mise en place de systmes distribus via CORBA ou DCOM
implmentatio n
instruction instruction instruction instruction instruction instruction
interface
57
Quest-ce que la collaboration ? Un objet utilise les services dautres objets Les objets collaborent Chaque objet est mini-serveur et client dautres objets
Voiture Feu
changer (Vert) Demarrer()
58
Demarrer()
Velo
Quest-ce que le polymorphisme ? Proprit pour un mme message de dclencher des mthodes diffrentes
- Dbrayer - Passer la premire - Acclrer - Embrayer
Voiture Feu
changer (Vert) Demarrer() Demarrer()
Velo
- Pdaler
59
Classes,mthodes, attributs
61
Classes,mthodes, attributs
Dclarer une classe Une classe public est visible en dehors du package
Par dfaut, elle nest pas visible On ne peut pas mettre 2 classes publiques dans un fichier erreur de compilation
Classes,mthodes, attributs
Dclarer un attribut (1/3) Lors de la cration dun objet, les attributs sont initialiss par dfaut :
zro pour les valeurs numriques null pour les rfrences false pour les boolens
Classes,mthodes, attributs
Dclarer un attribut (2/3) La valeur dun attribut dclar comme static est partage par toutes les instances (objets) de la classe La valeur dun attribut dclar comme final est constante
64
Classes,mthodes, attributs
65
Classes,mthodes, attributs
Le passage de paramtres Lors de lappel dune mthode prenant en paramtre des types de bases, les paramtres sont passs par valeur
La valeur des variables passes en paramtres est duplique Ce sont ces valeurs dupliques qui sont manipules dans la mthode
Lors de lappel dune mthode prenant en paramtre des objets, les paramtres sont passs par rfrence
Ils peuvent tre modifis dans la mthode
66
Classes,mthodes, attributs
Surcharge (1/3) Une mthode surcharge est une mthode qui peut tre appele avec plusieurs ensembles de listes de paramtres
Permet dcrire plusieurs versions dune mthode
Exemple void print () {} void print (int i) {} int print (float f) {} Le type du paramtre de retour nest pas pris en compte par le mcanisme de rsolution de surcharge
67
Classes,mthodes, attributs
Surcharge (2/3) A lappel, Java dtermine quelle est la mthode dont la liste des paramtres est la plus proche des paramtres effectivement envoys par lappelant Si aucune signature de mthode ne correspond au valeurs envoyes, la machine virtuel Java est capable de convertir une valeur envoye dans le type du paramtre Java dtermine le cot des conversions possibles et choisit le cot le moins lev. Si le cot global de conversion dpasse 10, Java refuse lappel
68
Classes,mthodes, attributs
Surcharge (3/3)
vers
byte
de
0 10 11 12 12 15 16
Classes,mthodes, attributs
Constructeurs Cest une ou plusieurs mthode(s) permettant dinitialiser les objets Le constructeur est appel lors de la cration de lobjet Le constructeur a le mme nom que la classe Il na pas de valeur de retour (void est un type de retour) Le constructeur peut tre surcharg Java fournit un constructeur par dfaut (sans paramtres) si aucun constructeur nest dfini explicitement
70
Classes,mthodes, attributs
Exemple de constructeurs
class int int int Date { _jour = 1; _mois = 1; _an = 2000;
Date() { _an = 1999; } Date (int jour, int mois, int an) { _jour = jour; _mois = mois; _an = an; } Date d = new Date(10,12,2000); // instantiation de lobjet
71
Classes,mthodes, attributs
Cration dobjets Allocation de lespace mmoire pour stocker les variables dinstances Utilisation de loprateur new Appelle du constructeur adquat Retourne une rfrence sur lobjet cr
class Voiture { String _type; Voiture (String type) { _type = type; } void demarrer () {} // Dfinition de la classe
} Voiture clio = new Voiture("ClioRT"); // Cration de lobjet Voiture renault = clio; // Ajout dune rfrence sur lobjet renault.demarrer();
72
Classes,mthodes, attributs
Le Garbage Collector (ramasse-miettes) Il prend en charge la gestion de la mmoire Il alloue lespace mmoire lors de la cration des objets Il libre la mmoire occup par un objet ds quil ny a plus aucune rfrence qui pointe vers cet objet Il est capable de compacter la mmoire pour viter la fragmentation Cest un Thread de la machine virtuel Java
73
Classes,mthodes, attributs
this this = rfrence sur lobjet courant Reprsente linstance courante en train de sexcuter
class Compte { void crediter(float montant) {}; void debit(float montant) {}; } class Versement { void valider() {} void effectuer(Compte s, Compte d, float montant) { s.debiter(montant); d.crediter(montant); this.valider(); } }
74
Classes,mthodes, attributs
75
Classes,mthodes, attributs
null La valeur null peut tre assigne nimporte quelle rfrence sur un objet Une mthode peut retourner null Lappel dune mthode sur une rfrence dobjet valant null provoque une erreur dexcution (NullPointerException) On peut tester une rfrence pour savoir si elle vaut null
Personne moi = new Personne(); if (moi != null) { System.out.println("Jexiste toujours ! "); }
76
Classes,mthodes, attributs
Classes,mthodes, attributs
Mthodes static Le mot-cl static permet de dfinir une mthode comme statique Une mthode statique ne peut accder quaux attributs de la classe dclars comme static Lappel dune mthode statique ne se fait pas sur un objet, mais sur une classe
Exemple : Math.cos(3.14);
Classes,mthodes, attributs
79
80
Hritage (1/2) Toute classe Java est une sous-classe de la classe Object Java ne permet pas lhritage multiple La classe drive peut changer limplmentation dune ou plusieurs mthodes hrites : redfinition Il est possible de faire en sorte que lon ne puisse pas hriter dune classe en particulier : utilisation du mot-cl final Il est possible de faire en sorte quune mthode ne puisse pas tre redfinie : utilisation du mot-cl final
81
Hritage (2/2)
class Felin { boolean a_faim = true; void parler() { } void appeler() { System.out.println("minou minou,"); if (a_faim) parler(); } } final class Chat extends Felin { String race; void parler() { System.out.println("miaou! "); } } final class Lion extends Felin { void parler() { System.out.println("roar! "); } void chasser() {} }
82
Conversion entre classes Si une variable rfrence un objet dune classe, elle peut rfrencer un objet de nimporte laquelle de ses sous-classes
class Felin {} class Lion extends Felin {} Lion lion = new Lion(); Felin felin; felin = lion; lion = felin // OK conversion implicite : les lions // sont des flins // ERREUR : tous les flins ne sont pas // des lions
83
Chat chat = new Chat(); felin = chat; // Conversion ascendante lion = (Lion)felin // ERREUR java ClassException
84
Polymorphisme (1/2) Une mthode polymorphe est une mthode dclare dans une super-classe et redfinie dans une sous-classe Une mthode Java st par dfaut polymorphe Les mthodes final ne peuvent pas tre redfinies
Permet la machine virtuel doptimiser le byte-code Est utilis pour des raisons de scurit
85
Polymorphisme (2/2)
class Cirque { Felin f_list[] = new Felin[3]; Cirque() { f_list[0] = new Lion(); f_list[1] = new Chat(); f_list[2] = new Tigre(); } void appeler() { for (int i = 0; i<3 ; i++) { Felin f = f_list[i]; f.parler(); } } }
86
Super (1/2) Le mot-cl super permet daccder aux mthodes et aux attributs de la super-classe super est utilis dans le constructeur de la classe drive pour appeler celui de la super-classe
Cela permet de factoriser du code super() doit tre la premire instruction du constructeur
class Felin { int _nbPattes; Felin(int nbpattes) { _nbPattes = nbPattes; } } class Chat { Chat() { super(4); race = "goutire"; } }
87
Mthodes et classes abstraites Une mthode abstraite est une mthode dont on donne la signature sans en dcrire limplmentation
Le mot-cl abstract permet dindiquer quune mthode doit tre redfinie dans une sous-classe
Les packages : dfinition (1/2) Un package est une bibliothque de classes On regroupe les classes dun mme domaine dans un package Les packages sont organiss hirarchiquement La notion de package apporte un niveau dencapsulation supplmentaire
89
Les packages : dfinition (2/2) Les classes du JDK sont classes dans des packages
java lang String.class Thread.class util Date.class Vector.class event awt Button.class List.class net Socket.class URL.class
Java importe automatiquement le package java.lang qui contient des classes comme Thread ou System
90
Les packages : utilisation (1/2) Il y a 2 manires dutiliser une classe stocke dans un package :
Utilisation du nom complet
java.util.Date dateDuJour = new java.util.Date(); System.out.println(dateDujour);
Les packages : utilisation (2/2) Le mot-cl package permet de dfinir un nouveau package La hirarchie des packages correspond la hirarchie des rpertoires
//fichier Compte.java dans le rpertoire Finance package finance; public class Compte { }
//Fichier Client.java dans le rpertoire de lapplication import finance.*; public class Client { Compte c = new Compte(); }
92
La variable CLASSPATH Le compilateur utilise la variable denvironnement CLASSPATH pour localiser les classes dun package sur le disque Cette variable doit rfrencer tous les rpertoires ou fichiers dans lesquels sont susceptibles de se trouver des classes Java On a le droit de placer les classes dans des archives (zip, jar, cab)
Dans ce cas, la variable CLASSPATH doit rfrencer le fichier
Classes publiques Le mot-cl public permet de dfinir une classe comme publique Seules les classes public sont accessibles depuis lextrieur du package Chaque fichier java doit contenir au maximum une classe public
Cette classe doit porter le nom du fichier dans lequel elle est dfinie (en respectant les majuscules/minuscules)
Les classes non public ne sont utilisables qu lintrieur du fichier dans lequel elles sont dfinies
94
Visibilit - Encapsulation Permet de distinguer les services offerts (interface) de limplmentation Lencapsultation des classes Java est dfinie au niveau du package ILencapsulation agit au niveau des classes et non des objets
Un attribut private dans un objet sera accessible depuis une autre objet de la mme classe
95
Rgles de visibilit
friendly
(par dfaut)
96
Rgles de visibilit Pour une bonne encapsulation, il est prfrable de dfinir les attributs comme private On dfinit alors des mthodes publiques (accesseurs) permettant de lire et/ou de modifier les attributs
Si un accesseur retourne une rfrence sur un objet, rien nempche la modification de cet objet travers cette rfrence cela brise lencapsulation
class Personne { private Vector children = new Vector(); public Vector getChildren() { return children; } } Personne moi = new Personnes(); Rupture de Vector v = moi.getChildren(); lencapsulation v.addElement(new Personne("Paul");
97
Les interfaces
99
Les interfaces
Dfinition Une interface dfinit un ou plusieurs services offerts Elle est compose dun ensemble de mthodes abstraites et de constantes ( static et final ) Une classe peut implmenter une ou plusieurs interfaces
Elle doit fournir une implmentation pour chaque mthode
interface Printable { void print(); class Point extends Object implements Printable { private double x, y; void print() { System.out.println(x); System.out.println(y); } }
100
Les interfaces
Hritage multiple dinterface Une interface peut hriter dune ou plusieurs autres interfaces
Java supporte lhritage multiple dinterface
class Point implements Printable , SGBD { private double x, y; void print() {}; void save() {}; void connect() {};
}
101
Les interfaces
Interfaces et types Une interface dfinit un nouveau type Des objets diffrents peuvent rpondre au mme message condition quils implmentent la mme interface Loprateur instanceof peut tre utilis pour savoir si un objet implmente une interface donne
Point point = new Point(); if (point instanceof Printable){ point.print(); }
102
Les interfaces
Variables dinterfaces Les variables dclares dans une interface sont des constantes
Les mots cls static et final ne sont pas ncessaires
int i = MyInterface.MAX;
103
Les interfaces
Quand utiliser les interfaces ? Pour dfinir des services techniques Pour contourner le fait que Java ne supporte pas lhritage multiple Interface vs Hritage :
On utilise lhritage quand un objet est un sous-type dun autre On utilise une interface pour dcrire le fait quune classe implmente un service particulier
Personne
extends
Persistent
implements
104
Client
Les interfaces
Conception par contrat (1/4) Exemple : on dfinit les classes Client , Banque et Compte
Compte Client
0..*
Banque
0..*
105
Les interfaces
Conception par contrat (2/4) Le Client et la Banque ont des points de vue diffrents sur un Compte . Ils nutilisent pas les mmes mthodes
On dfinit des contrats diffrents
ICompteClient credit() debit() balance()
0..* implements
Compte
credit() debit() balance() save() load()
implements
ICompteBanque
balance() save() load()
0..*
Client
Banque
106
Les interfaces
Conception par contrat (3/4) La mthode balance peut tre mise en facteur
ICompte balance()
implements
implements
Client
Banque
107
Les interfaces
Conception par contrat (4/4) Les mthodes save et load sont des services techniques transversaux IPersistant
ICompte balance() save() load()
implements
implements
ICompteBanque
0..*
Client
Banque
108
109
La mthode toString() retourne une description de lobjet La mthode equals(Object) teste lgalit smantique de deux objets Le mthode getClass() retourne le descripteur de classe. Il permet de :
connatre la classe dun objet connatre le nom de la classe, ses anctres dcouvrir la structure des objets (JDK 1.1)
110
111
finalize() est appel avant que le ramasse-miettes ne libre la mmoire occupe par lobjet
Permet de librer des ressources alloues par lobjet
Les classes Wrapper : description Les types de base Java ne sont pas des objets
Il est parfois indispensable de les manipuler comme des objets
Boolean, Integer, Float, Double, Long, Character Attention : ne supporte pas doprateurs (+, -, ) Elles sont dans le package java.lang
113
114
115
La classe java.lang.String Contient une chane de caractres Classe connue par le compilateur Java
Une chane constante sera convertie en objet de la classe String String msg = Hello Java World !
String : concatnation
int area = 33; int prefixe = 1; int suffixe = 02030405; // Chaque concatnation cre un nouvel objet // lancien est dtruit par le Garbage Collector String numTel numTel numTel numTel = "(" + area + ")"; += prefixe += "-" += suffixe // (33) // (33)1 // (33)1// (33)1-02030405
// Un seul objet est cr numtel = "(" + area + ")" + prefixe + "-" + suffixe // Conversion dun entier en chane String un = 1 + "";
117
String : manipulation length() : cette mthode permet de connatre le nombre de caractres dune chane
Ex : for (int i = 0; i < monTexte.length(); i++) {......}
La classe java.lang.StringBuffer Cest une chane de caractres modifiable et de taille variable Son utilisation est moins simple que String
pas dutilisation possible de loprateur +
119
La classe java.util.Vector Tableau de rfrences taille variable On ne peut y stocker que des rfrences sur les objets
Impossible de stocker directement un type de base dans une collection de type Vector : utiliser pour cela les classes wrapper Souvent utilis pour coder une relation 1-n entre deux classes
Possibilit de savoir si un objet est prsent dans le tableau et quelle est sa position Vous pouvez :
Insrer ou supprimer des rfrences Parcourir le contenu
120
121
Int size()
Retourne la taille courante
122
Linterface java.util.Enumeration
Objet permettant de parcourir les lments dun conteneur
Une numration ne stocke aucune information Ne contient quune position courante dans le conteneur Interface unique pour le parcours de tous les types de conteneurs Ne fonctionne que pour un seul parcours Cest une interface, pas une classe
123
Enumeration : exemple
Vector vInt = new Vector(); for (int i = 0; i<10 ; i++) { Integer elt = new Integer(i); vInt.addElement(elt); } // 0123456789
124
Quand utiliser une Enumeration ? Utilisez une Enumeration pour parcourir une association 1..*
Personne
possde -> proprietaire 0..*
Voiture
125
La classe java.util.Hashtable Object put(Object key, Object value) : insre un lment Object remove(Object key) : supprime la cl Object get(Object key) : retourne la valeur associe la cl Boolean containsKey(Object key) : teste si la cl existe Keys() : retourne une Enumeration sur les cls Elements() : retourne une Enumeration sur les valeurs
128
Hashtable : un exemple
Hashtable deptable = new Hashtable(); // Stockage dobjets de type Departement en utilisant // une cl de type String deptable.put("Ain", new Departement(1)); deptable.put("Aisne", new Departement(2)); deptable.put("Allier", new Departement(3)); Departement dep = (Departement)deptable.get(("Aisne"); // Parcours de toutes les cls de la hashtable for (Enumeration noms = deptable.keys(); noms.hasMoreElements();) { String nom = (String)noms.nextElements(); Departement dep2 = (Departement)deptable.get(nom); System.out.println(nom + " = " + dep2); }
129
130
Les exceptions
131
Les exceptions
A quoi servent les exceptions ? Le mcanisme des exceptions Java permet de traiter les erreurs dxcution Il permet aussi de grer toutes les situations hors contrat dfinit par le concepteur Le travail du concepteur :
Dfinir les ensembles dinstructions risque Implmenter les gestionnaire dexceptions pour chaque cas
Les exceptions
Exemple (1/2)
class Equation { double _a; double _b; double c; // Constructeur Equation(double a, double b, double c) { _a = a; _b = b; _c = c; } // Calcul du delta public double delta() { return _b*_b 4*_a*_c; } // Solution public double solution() throws PasDeSolution { double discr = delta(); if (discr<0) throw new PasDeSolution(); return (_b + Math.sqrt(discr))/(2*_a); } }
133
Les exceptions
Exemple (2/2)
class PasDeSolution extends Exception { // Retourne la description du problme String toString() { return "Lquation na pas de solution"; } }
... ... // Mthode appelante try { Equation ed = new Equation(1,0,1); double resultat = eq.solution(); } catch(PasdeSolution p) { System.out.println(p.toString); }
// x2 + 1 = 0
134
Les exceptions
Le mot-cl Throws sutilise au niveau de la signature dune mthode pour prciser que celle-ci est susceptible de soulever une exception
public double solution() throws PasDeSolution {
135
Les exceptions
Try - Catch et Throws Lorque que lon utilise une mthode susceptible de soulever une exception, il faut spcifier comment on la gre. 2 Solutions :
Traiter le cas dans la mthode : Try - Catch
try { double resultat = eq.solution(); } catch(PasdeSolution p) { System.out.println(p.toString); }
Les exceptions
Finaly Le mot-cl Finally permet de dclarer un bloc dinstruction qui sera excut dans tous les cas, quune exception survienne ou non.
try { // Ouvrir le fichier Erreur ici ! // Lire les donnes // } catch (IOException i) { System.out.println("Erreur I/O sur le fichier"); return; } finally { Retour aux instructions // Fermer le ficher // suivant la lecture }
Les exceptions
Classification des exceptions Le JDK contient des classes dexceptions dont voici un extrait :
Object
Throwable
Error
Exception
......
......
RuntimeException
SecurityException
......
ArithmeticException
NullPointerException
PasDeSolution
138
Les exceptions
Exception ConnectionException
NetworkFailure
AuthentificationFailed
ServerDownOrBusy
InvalidPassword
InvalidLogin
139
Les exceptions
Debugging : les traces Une exception drive de la classe Object. Utilisez la mthode toString() pour garder des traces dexcution La mthode PrintStackTrace() permet dafficher la pile des appels depuis la mthode qui a dclench lexception La classe Throwable prend une String sa construction. Cela permet denrichir les traces avec des messages spcifiques, rcuprs avec getMessage()
140
Les entres-sorties
141
Les entres-sorties
Reader
Writer
OutputStream
InputStream
InputStreamReader
OutputStreamWriter
142
Les entres-sorties
143
Les entres-sorties
Fichier
Filtre
Reader
Writer
OutputStream
InputStream
FilterReader
FilterWriter
FilterOutputReader
FilterInputWriter
144
Les entres-sorties
Les entres-sorties
146
Les entres-sorties
Sous-classes de la classe Writer PipedWriter : criture dun flux de caratres vers un Pipe (IPC) StringWriter : criture dun flux de caratres dans un String CharArrayWriter : criture dun flux de caratres dans un tableau de char OutputStreamWriter : criture dun flux de caratre vers un OutputStream BufferedWriter : permet de mmoriser les caractres lors de lcriture pour amliorer les performances ...etc
147
Les entres-sorties
La classe java.io.PrintWriter Permet dcrire une chane de caractres, un entier (Integer), etc., vers un canal de sortie Pour crire, on utilise les mthodes write ou writein Le flushing peut tre automatique ou non
try{ FileWriter fos = new FileWriter("text.txt"); PrintWriter p = new PrintWriter(fos,true); String s = "Je suis une chane";
p.print(s); P.println(s);
} catch(IOException e) {}
148
Les entres-sorties
La classe java.io.BufferedReader Permet de lire des informations depuis un Reader quelconque (entre standard, fichier, )
try{ // Lecture depuis un fichier BufferedReader in = new BufferedReader(new FileReader(args[0])); String s = new String(); while((s = in.readLine()) != null) System.out.println(s); in.close(); // Lecture depuis le clavier BufferedReader clav = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Saisissez une phrase : "); String s = clav.readLine(); } catch(IOException e) {}
149
Les entres-sorties
Principales mthodes :
Boolean isDirectory() String[] list (FilenameFilter filter) Boolean isFile() Int length() String getAbsolutePath() Boolean delete() Boolean renameTo(File dest) Boolean exists() Boolean mkdir(String name) Boolean canReads() String [] list () Boolean canWrite()
150
Les entres-sorties
La classe java.io.RandomFile
La classe RandomAccessFile permet la lecture et lcriture nimporte quelle position dans le fichier Loctet est lunit de mesure des positions et des dplacements dans le fichier Constructeurs (throws IOException) :
Public RandomAccessFile (File file, String mode) Public RandomAccessFile (String name, String mode) Mode = r (lecture seule) ou rw (lecture et criture)
Mthodes :
ReadInt, readFloat, readBoolean : lecture des types de base (Interface DataInput) WriteInt, writeFloat, writeBoolean : criture des types de base (Interface DataOutput) Seek(long) : dcalage en octets
151