Upload
cunegonde-tissier
View
116
Download
4
Embed Size (px)
Citation preview
1
Chapitre I
(Merci à Alain PILLOT pour son cours !)
Présentation du langage Java
2
PLAN du Module Java
Chapitre 1 – Les bases de JavaLes bases, introduction, la syntaxe java
Chapitre 2 - Programmation orientée Objet avec Java
Chapitre 3 – Environnement JavaPlateforme java, Sécurité dans java
Chapitre 4 – Les interfaces en Java Chapitre 5 – les JavaBeans
3
Références bibliographiques
Flanagan et Gachet, Java in a nutshell (Java1.4),
4ème édition (en français), O’REILLY, 2002
Horstmann Cornell, Au cœur de JAVA,
Volume 1 et volume 2, CAMPUSPRESS, 1999
Delannoy, Programmer en JAVA, EYROLLES, 2000
Lemay Cadenhead, JAVA 2, CAMPUSPRESS, 2002
Horton, Maîtrisez Java 2, CAMPUSPRESS, 2001
M. Lai, Penser Objet avec UML et Java
Masson - InterEdition, 1998
4
Sites java
http://java.sun.com Pour les développeurs :
http://developer.java.sun.com (gratuit mais il faut s’enregistrer)
Sur la plateforme distribuée en java :http://www.oreillynet.com incluant onjava.com
Tous les exemples du livre « Java in a nutshell » sont téléchargeables sur :http://www.oreilly.com/catalog/javanut4
5
Sites Java (2) à vérifier
Normes de programmation en Java : http://www.damas.ift.ulaval.ca/ressources/normes/NormesJAVA.html
http://www.gamelan.comhttp://cuiwww.unige.ch/java/doc/tutorial/
java/index.html http://www.ensta.fr/java/java_liens.html
6
1 - Généralités
7
Historique
Début 90, une équipe dirigée par James Gosling de SunSoft est chargée de développer un nouveau langage « léger » appelé OAK Doit être déployable partout : magnétoscope, GAB Multi plateformes Intégration des avancées en Génie Logiciel (COO) En même temps, Internet explose
oak change de nom et devient java, se découvre être l’idéal pour internet :
peu de bande passante consommée, sécurisé, multi plateformes, adapté aux contraintes réseaux (virus, piratage..),
exploite la puissance de calcul du poste client…
8
Caractéristiques générales (1)
Java est donc un langage de programmation proposé par Sun Microsystems à partir des années 95
C’est un langage " à objets " classesobjetsmessageshéritage
programmation objet uniquement
9
Caractéristiques générales (2)
Java est un langage sécurisé :
pas de pointeurs, mais des références
pas de dépassement d'indice de tableau
pas de conversion implicite de types
tous les objets sont créés dynamiquement
nettoyage automatique de la mémoire
complexité de l'héritage multiple contournée par la notion d'interface
10
Caractéristiques générales (3)
Java implémente des mécanismes avancés : programmation parallèle
multithread synchronisation, exclusion mutuelle, communication
portabilité le compilateur génère un pseudo-code (le byte-code) exécuté par la machine virtuelle propre à chaque
environnement
distribution du code chargement dynamique code mobile
11
Caractéristiques générales (4)
Java est un langage simple
syntaxe familière similaire à celle du C++ le corpus des règles est limité les constructions sont simples les données sont typées selon des standards (C2,
IEEE 754, Unicode)
La difficulté de programmation réside essentiellement dans la maîtrise des concepts objets
12
Différences C et Java (1)
Pas de préprocesseur Déf. des constantes par static final Pas de macro (mais de moins en moins utiles) Pas de compilation conditionnelle (inutile au niveau
du programmeur, portabilité entre plateformes) Pas de variable globale, sinon au niveau d’une
classe :
paquetage
classes champs
méthodes
Variableslocales
Variablesglobales
instances
13
Types primitifs : de tailles bien définies En C, fonction de la machine
Pas de pointeurs Les classes et tableaux sont en Java de type
Référence Référence = pointeur opaque : on ne peut rien faire
avec (pas de &, de * ou de ->, pas de sizeof, pas de conversion en type primitif)
Ramasse-miettes : fournie avec la MVJ Pas de goto :
break et continue sont de bons substituts !
Différences C et Java (2)
14
Localisation des déclarations de variables : libre Compilateur Java plus souple : les méthodes peuvent être
invoquées alors qu’elles ne sont définies qu’après Surcharge possible des méthodes :
avec une liste des paramètres différente
Pas de type struct ni union,pas d’enum, pas de champs de bits
Pas de typedef Pas de méthode à nb variable d’arguments
La surcharge permet d’en simuler le fonctionnement On peut aussi transmettre les arguments sous forme d’un tableau Object
Différences C et Java (3)
15
JAVA VERSUS C/C++
Pas de pointeurs Pas de conversions
automatiques de types Pas d’héritage multiples
pour les classes ( interfaces)
Pas de surcharge des opérateurs
Pas de variables globales Pas de pré-processeur
…………
• Pas de structures ni d’unions, ni de types énumérés
• Vérification des débordements des indices de tableaux
• Gestion automatique de la mémoire
• La taille des types est indépendante du SE de l’ordinateur
16
L’AVENIR DE JAVA
Les Java beans Tentatives d’uniformisation de composants réutilisables et configurables à l’aide d’outils.
100 % Pure JavaMise en place par Sun d’une politique de certification d’application 100% pure Java.
Les puces Java Microprocesseur « spécialisé » destiné à combler le manque de performance de Java.
17
2 – Développer avec Java
18
Principe de fonctionnement
Pour qu'un même programme puisse s'exécuter sur des machines de natures différentes (Unix, Windows, Mac, ...), le programme est en fait exécuté par une machine virtuelle. Ainsi, de son point de vue, le programme s'exécute
toujours sur la même machine. Une machine virtuelle Java sur un poste capable
d'exécuter tous les programmes Java « Write once, run anywhere » slogan WORA
19
Les types d'application (1)
Programme Java pseudo-code obtenu par la compilation d'un source
écrit en langage Java exécuté de manière autonome à l'aide de l'interpréteur
Java Virtual Machine (JVM). correspond à une application au sens classique
Applet p-code invoqué depuis des documents HTML exécuté à l'intérieur du navigateur ou encore grâce à
un programme dédié : l'applet viewer résidant sur le serveur et téléchargé via le réseau
20
Les types d'application (2)
Mais aussi…
Servlet Java = applet côté serveur et sans interface utilisateur (pgm exécuté par un serveur web)
Java Beans = composants logiciels écrits en Java et réutilisables
JavaScript = langage frère de Java simplifié pour être directement intégré dans une page HTMLafin d'effectuer des traitements sur le poste client
21
Chaîne de développement (1)
1) Écriture à l'aide d'un éditeur du fichier source d'extension .java (exemple NomFic.java)
2) Compilation du source pour compiler : javac NomFic.java on obtient le fichier de byte-code NomFic.class
3) Exécution du byte-code pour une application : java NomFic.class pour une applet, on invoque le code à l'intérieur
d'une page HTML grâce aux balises : <applet code = "NomFic.class" …</applet>
22
Chaîne de développement (2)
Exemple de fichier source
// HelloWorld.java
public class HelloWorld { public static void main(String[] args){ System.out.println("Hello World!"); }}
23
Chaîne de développement (3)
Remarques :
Tout fichier source .java doit avoir une classe déclarée public portant le même nom que le fichier sans l'extension
ici class HelloWorld fichier HelloWord.java Pas de fonctions ou de variables globales : même le
point d'entrée du programme main appartient à une classe L'usage veut qu'un fichier source ne contienne qu'une seule classe
Attention à la casse !
24
Chaîne de développement (4)
Compilation et exécution avec le SDK
$javac HelloWorld.java
$java HelloWorldHello World!
$
S'il n'y a pas d'erreur, le compilateur produit un fichier ".class" par classe définie dans le fichier
25
Inclusion de classes prédéfinies
Si le fichier x.java utilise des classes définies dans d'autres fichiers, le compilateur va les chercher « de lui-même ».
C'est le cas dans l’exemple : System est en fait une classe prédéfinie de Java
System.out.println("Hello World!”); Il n'y a pas besoin de directive du type "#include"
comme en C.
26
Chaîne de développement (5)
HelloWorld.java
javac HelloWorld.java
HelloWorld.class
Fichier sourceFichier source
Programme compilé(p-code)
Programme compilé(p-code)
CompilationCompilation
Moteur d’interprétationp-code
Registres / pilesvirtuels
Machine virtuelle Java Système d'ExploitationUnix, Windows, Mac, etc.
java HelloWorld
Source P.Emy CERTA
27
Les outils (1)
Le minimum requis un éditeur de texte (exemple TextPad, WordPad) javac (le compilateur) java (l'interpréteur de pseudo-code)
Pour les applets il faut en plus : Soit le visualiseur applet viewer ; Soit:
une connexion réseau la pile protocolaire TCP/IP un navigateur avec un interpréteur Java
28
Les outils (2)
Les outils de base permettant de compiler et
d'exécuter des programmes Java sont regroupés dans
le J2SE (anciennement JDK, Java Developpement Kit) de Sun téléchargeable à partir
du site http://java.sun.com/ L’IDE (Integrated Development Environment) fournit
un cadre de développement et débuggage gratuit (produit Sun). Attention : très volumineux !!
Il existe aussi de nombreux outils intégrés : Jbuilder de Borland; Jdeveloper d'Oracle; Visual J++
Café de Symantec , etc.
29
Les outils (3)
L'utilitaire jar (Java Archive) permet : d'archiver des classes Java; mais aussi des fichiers image ou audio ; de distribuer ou d'installer une application.
Pour créer un fichier jar : jar –options [path][…]
(options identiques à celles de l'utilitaire tar d'Unix)
Pour récupérer le contenu d'un fichier jar par la ligne de commande jar –t [path][…] dans une applet par <APPLET CODE="….class" ARCHIVE="….jar" …>
30
Un premier programme Java
// fichier ex1.java// exemple avec un main comprenant deux boucles
public class Ex1{ public static void main(String[] args) {
int i;long s=0;
for(i=0;i<10000;i++)s+=i*i*i;
System.out.println(s);i=0;do{
System.out.println("i vaut "+i);i=i+1;
} while(i<10); }}
Modificateur : la classe est accessible partout où le package associé
l’est
Nom de la classe
Type retourné par la méthode Nom et type de
l’argument
Affichage à l’écran de s
31
3 - Éléments du langage
32
Mots réservés en Java
abstract default if private throw
boolean do implements protected throws
break double import public transient
byte else instanceof return try
case extends int short void
catch final interface static volatile
char finally long super while
class float native switch
const for new synchronized
continue goto package this
33
Les identificateurs
Identificateur = nom des différents éléments du programme Variable ex: totalGeneral constante ex: TAILLE méthode ex: int getX() classe ex: class MaClasse package ex: java.util.Vector
Formé à partir de lettres, de chiffres et des caractères _ et symbole monétaire (pas de chiffre comme premier caractère, pas
de caractères de ponctuation )
34
Conventions pour le choix des identificateurs
Packages : en lettres minuscules com.sun.eng, system.out
Classe ou interface : un nom ; il commence par une majuscule. S'il y a plus d’un mot, tous les mots commencent
par des majuscules : class ImageAnimee; Attributs : commencent par (un symbole de
soulignement puis) une minusculeint _rayonCercle;
35
Règles (suite)
Variables : commencent par une lettre minuscule int largeurCercle;
Constantes : tout en majuscules et underscoreLARGEUR_MAXIMALE = 50 ;
Méthodes : verbe à l'infinitif (suivi éventuellement d'un complément) ; commence par une minuscule, puis Maj à chaque nouveau motvoid decalerAGauche(); Le complément peut avoir plus d'un mot. Les méthodes d’accès aux attributs doivent commencer par get ou set et être suivi par le nom de l'attribut :
deplacerForme(); envoyerMessageATous();
setLargeur(); getLargeur();
36
Les symboles
Caractères ou groupe de caractèrespour représenter des opérateurs pour représenter des caractères spéciaux & ~ { } ( ) [ ] | \ / * - + % , ; . < > = ! ^ ? :
Exemples:== opérateur d'égalité
>>> opérateur de décalage binaire à droite non signé
37
Les commentaires
3 styles de commentaires
plusieurs lignes/* ceci est un commentaire qui se termine ici */
sur une ligne// commentaire sur une ligne
destiné au générateur automatique de documentation JavaDoc/** commentaire destiné à l'outil de documentation automatique */
Ils ne peuvent être emboîtés
38
Les commentaires JavaDoc
Ils permettent de documenter la classe en même temps que le codage
Le programme javadoc génère des fichiers HTML de documentation à partir des fichiers Java
On peut inclure du code HTML dans les commentaires Javadoc
39
Les commentaires JavaDoc
Permet de décrire si nécessaire pour une classe ses spécifications sa version son auteur
Dans la classe on peut également préciser le rôle de chaque attribut décrire les méthodes (paramètres, valeur retournée,
exceptions pouvant être éventuellement générer)
meilleure lisibilité du programme
40
Définition du fichier source
Il y a un fichier source pour chaque classe ou interface.
Le fichier source Java doit comprendre 3 parties dans cet ordre :
1) Commentaire global /* * Classe: Cercle
* * Auteur: Suzie LaBouclette
* * 13 mai 2002 Création
* 25 mai 2002 Ajout de la méthode XXX
* 12 juin 2002 Modification de la méthode YYY */
2) Instructions package et importpackage java.awt; import java.awt.peer.CanvasPeer;
3) La déclaration de la classe ou de l'interface
41
Codage caractères pour Java
ASCII 7 bits(permet de représenter solo l’anglais)
ISO Latin-1 8 bits(langues Europe Ouest)
Unicode 16 bits (toutes les langues) Mais peu de traitement de texte prennent en compte
Unicode dans la pratique… La plupart des pgms Java sont rédigés en ASCII pur
On peut se contenter d’écrire les pgms en ASCII (format texte), ils fonctionneront sous une forme Unicode valable
42
Les types en Java
Les types en Java se classent en 2 catégories les types primitifs ou types de base
les caractères les entiers les réels les booléens
les types références les tableaux tous les objets manipulés
Important pour le passage de paramètres aux méthodes qui se fait par valeur
43
Types primitifs
Un type booléen Un type caractère 4 types entier : byte, short, int, long
Utilisent un nombre de bits différents
plages de valeurs différentes
2 types à virgule flottante (réels)float et double
44
Les types primitifs
Entier: type codé en C2 byte 1 octet (8 bits), entier signé, short 2 octets (16 bits), entier signé, int 4 octets (32 bits), entier signé, long 8 octets (64 bits), entier signé
Réel: type codé en IEEE 754 (virgule flottante) float 4 octets (32 bits) double 8 octets (64 bits) Selon le format, préfixe f,F ou d,D
Caractère : type char codé en Unicode sur 2 octets, \u et 4 chiffres hexadécimauxEx.: \u2203 correspond au caractère ‘il existe’
Booléens: type boolean (true/false) codé sur 1 bit
45
Les types primitifs
Type primitif Valeurs possibles Valeur par défaut boolean true / false false char '\u0000' à '\uFFFF' '\u0000' (null) byte -128 à 127 (byte)0 short -215 à 215-1 (short)0 int -231 à 231-1 0 long -263 à 263-1 0L
float -3.4028235e+38f à 3.4028235e+38f
0.0f
double -1.7976931348623157e+308 à 1.7976931348623157e+308 0.0d
void - -
46
Les types primitifs
Codage des caractères ASCII sur 128 premiers caractères les 128 autres = caractères des divers langages les suivants = divers symboles Les caractères sont écrits entre ’
ainsi la séquence ’\uNNNN’ désigne le caractère dont la valeur Unicode est NNNN
’\u0020’signifie blanc ( identique à ' ') ’\u0041’signifie A ( identique à 'A') ’\’’ signifie ’ ’\\’ signifie \
47
Constantes entières
Appelées ‘littéraux entiers’ en java Exprimés en notation décimale, octale ou
hexadécimale (pas binaire) Notation hexadécimale : 0x et série de chiffres
ou de lettres de A à F, a à f (base 16) 0xff vaut 255 0xCAFEBABE : nb magique désignant les fichiers
de classe Java Notation octale : en base 8, commencent par 0
et série de chiffres (tous, sauf 8 et 9) 0377 255 en octale
48
Littéraux entiers
Par défaut, sont des valeurs du type int int n = 1224; long lp = 3009;
Sauf si l ou L précisé : type long long m = 1224L; m = 0xffl;
49
Littéraux à virgule flottante
Par défaut, considérés comme double double d = 3.78e-04;
Pour un littéral de type float, préciser f ou F : float f = 3.14F;
Ne peuvent pas être exprimés en hexadécimal ou octal
50
Valeurs limites
Codage = approximation numérique, d’où pour les classes les classes java.lang.Float et java.lang.Double, existence de :
POSITIVE_INFINITY (infini, par ex. 1/0), NEGATIVE_INFINITY (-infini)
en cas de dépassement de capacité supérieure Le zéro positif (1/) et le zéro négatif (-1/)
en cas de dépassement de capacité inférieure selon la direction
NaN (Not A Number) ex. 0/0 Double.NaN constante de classe
51
Dépassement de valeurs
Exemple : byte b1=127,b2=1;
byte sum=b1+b2; Ne génère pas d’exception !
int a=23; int b=0; float x= (float) a/b; X vaut l’infini positif !!
Sauf pour : division entière par zéro modulo par zéro
ArithmeticException
52
Un premier exemple
public class ex1 {public static void main (String[] args) {
int i;long s=0;
for(i=0;i<10000;i++) s=s+i*i*i;System.out.println(s);i=0;do {
System.out.println("i vaut"+i);
i=i+1;
} while(i<10);}
}
public class ex1 {public static void main (String[] args) {
int i;long s=0;
for(i=0;i<10000;i++) s=s+i*i*i;System.out.println(s);i=0;do {
System.out.println("i vaut"+i);
i=i+1;
} while(i<10);}
}
53
Explications
Le fichier s'appelle ex1.java Ce fichier contient une classe publique ex1ex1 contient une méthode publique et statique
‘main’ :public static void main(String[] args)
Le programme exécute cette fonction main()
54
Main()
String[] : type tableau de chaînes de caractères Dans une application Java, il doit y avoir au moins une
classe qui possède une méthode main() C’est par elle que débutera l’interpréteur Java public static void main() : obligatoire
Une applet : le pgm Java n’est pas exécuté directement par l’interpréteur, mais par une application Java (navigateur web) pas de main() nécessaire
Servlet : pgm exécuté par un serveur web pas de main() nécessaire
55
Compilation
javac ex1.java compile le programme : on obtient alors le fichier ex1.class
On peut exécuter le fichier ex1.class grâce à la machine virtuelle java nommée java
Exécution du programme :java ex1
56
Machine virtuelle java
Rend le code java portable sur toutes les machines
Elle traduit à la volée le code javaElle implémente les fonctions d'entrée
sorties des packages
57
Les chaînes de caractères
En Java il n'y a pas de type chaîne prédéfini Mais le langage manipule ce concept
On utilise pour cela la classe String fournie d'origine avec le langage String ch1="voici une chaine";
Ch1 désigne une chaîne constante, non modifiable. Ch1 peut désigner une autre chaîne, ch1 est une variable
String ch2="bonjour";ch1 = ch2;
Il existe aussi une classe StringBuffer de chaînes modifiables
Ces deux classes font partie du package java.lang reconnu de façon implicite
58
Conversion de types
Boolean est le seul type primitif qui ne peut être converti en autre type primitif Java
Cependant attention ! char n’est pas signé Transtypage (ou cast): le plus souvent pour
transformer un réel en entier et réciproquement Autres arrondis :
Math.round() : public static int round(float a); Math.floor() : public static double floor(double a); Math.ceil() : public static double ceil(double a);
On a : Math.ceil(x) = -Math.floor(-x)
59
Conversion de chaînes en entier
Valeurs limites des types : constante de classes Type.MIN_VALUE Type.MAX_VALUE
Ex. : long n;
if (n>Integer.MAX_VALUE) ….
Méthodes statiques associées aux classes du type: Byte.parseByte() Integer.parseInt()
60
Les variables
Déclaration identique au C++ unType var1[,var2,…]; unType var1=val1[,var2=val2,var3,…];
Une variable représente : l’attribut d'une classe une variable de classe une variable locale à une méthode de classe
Caractéristiques : conversion toujours explicite et identique au Cvar1 = (type_force) var2;
portée limitée au bloc { } de déclaration
61
Les variables
Exemples :boolean encore = true; // initialisation à vraiint x = 10; // decimal
int x = 0x0A; // hexadécimal
int x = 10L; // entier long
float y = 6.55957F; // réel simple précision
x = (int) y; // transtypage d'un réel vers un int float z = -2.45E-3F; // réel avec exposant
double PI = 3.14159D; // réel double précisionchar rep = 'n'; char rep = '\u006e'; // code ASCII de 'n'
62
Déclaration de constantes
Une constante est définie à l'aide de final et est toujours initialisée final type MA_CONSTANTE = valeur; Exemples:
final float CM_PAR_POUCE = 2.54F;final double E = 2.71828182845905D;
Une constante de classe est définie à l'aide de static final Exemple:
static final float PI = 3.14159F;
63
Les constantes caractères
Caractères spéciaux:
'\b' caractère backspace (retour arrière) '\f' caractère saut de page (formfeed) '\n' caractère saut de ligne (new line) '\r' caractère retour chariot (début de ligne) '\t' caractère de tabulation '\\' caractère \ '\'' caractère '
64
Les opérateurs
Opérateur d'affectation=
Opérateurs arithmétiques + - * / % ++ -- += -= *= /= %=
Opérateurs relationnels > >= == != < <=
Opérateurs logiques && || !
Opérateurs binaires & | ^ ~ >> << >>>
65
Les opérateurs (2)
Opérateur logique ternaire : ? composé de trois expressions expression1 ? expression2 : expression3 si expression1 vraie alors expression2
sinon expression3 valAbs = (x >= 0) ? x : -x;
Opérateur d'allocation mémoire new
66
Priorité des opérateurs
Opérateur par ordre décroissant et de gauche à droite . [] () new ++ -- ! ~ instanceof * / % + - << >> >>> < > <= >= == != & ^ | && || ?: = *= /= %= += -= <<= >>= >>>= &= ^= |= ,
67
Opérations sur les caractères
La classe Character possède les méthodes statiques utiles : isDigit() isJavaLetter() isLowerCase() toUpperCase()
68
Exemple 2
public class ex2 {
public static void main(String[] args) {
byte a;short b;int c;long d;
a = -87;b = 16300;c = 2000000000;d = 2000000000000L;System.out.println(a);System.out.println(b);System.out.println(c);System.out.println(d);
}}
public class ex2 {
public static void main(String[] args) {
byte a;short b;int c;long d;
a = -87;b = 16300;c = 2000000000;d = 2000000000000L;System.out.println(a);System.out.println(b);System.out.println(c);System.out.println(d);
}}
69
Exemple 3
public class ex3 {public static void main(String[] args) {
float a;double b;
a = 1.5E30F;b = 1.3E-100;System.out.println(a);System.out.println(b);
}}
Affiche :1.5E30
1.3E-100
70
Exemple 4
public class ex4 {public static void main(String[] args) {
int c; boolean a,b;
a = true; c = 80; b = (c>456); System.out.println(a); System.out.println(b);}
}
public class ex4 {public static void main(String[] args) {
int c; boolean a,b;
a = true; c = 80; b = (c>456); System.out.println(a); System.out.println(b);}
}
Affiche :TRUE
FALSE
71
Exemple 5
public class ex5 {public static void main(String[] args) { char c;
c='5'; if ((c>'0') && (c<='9'))
System.out.println("c’est un chiffre !!!!");}
}
public class ex5 {public static void main(String[] args) { char c;
c='5'; if ((c>'0') && (c<='9'))
System.out.println("c’est un chiffre !!!!");}
}
72
Exemple 6
public class ex6 { public static void main(String[] args) {
int a,b,c,d,e,f,g,h,i,j,k;a=100; b=30; c=a+b; d=a-b;e=a*b;f=a/b; g=a%b; h=40;i=9; j=80; h*=a; i+=a;j-=b k=3001; k/=30;System.out.println(c); System.out.println(d);System.out.println(e); System.out.println(f);System.out.println(g); System.out.println(h);System.out.println(i); System.out.println(j);System.out.println(k);
}}
73
4 – Les structures de contrôle
74
Les structures de contrôle
L'alternative if (<expression_logique>)
<bloc1>else
<bloc2>
(un bloc commence par { et finit par })
Alternatives imbriquées if (<expr1>)
<bloc1>else if (<expr2>)
<bloc2>else if (expr3>)
<bloc3>else
<bloc4>
75
Les structures de contrôle
Le choix multiple
switch (<expression_entière>) {case valeur_1: ......;
break;case valeur_2: ......;
......;case valeur-n: ......;
......;break;
default: ......;......;
}
76
Les structures de contrôle
Le choix multiple (suite) branchement lorsque l'expression entière est égale à une
des valeurs des case branchement à default si aucune valeur trouvée passe en séquence jusqu'au premier break
ou fin du switchswitch (rep) { /* on teste la valeur du caractère rep */
case ' ' : nb_space++;break;
case '\n':case '\0': fini=1;
break; /* fini=1 pour rep ='\n' ou '\0' */default : nb_car++;
}
77
Les structures de contrôle
L'itération bornée traduction du pour for(<expr1>;<expr2>;<expr3>)
<bloc> expr1 effectuée 1 fois pour toutes expr2 condition de maintien expr3 effectuée à la fin de chaque boucle
nombre de passages 0 à n
78
Les structures de contrôle
La répétitive tant que while(<expression >)
<bloc> expression condition de maintien nombre de passages 0 à n
La répétitive répéter …tant que do<bloc> while (<expression>) ;
nombre de passages 1 à n
79
Les structures de contrôle
L'instruction break permet de sortir d'un switch d'un for d'un while d'un do
for(;;) { if (EVENEMENT) break; /* si EVENEMENT devient VRAI on sort */}
80
Les structures de contrôle
L'instruction continue force le passage à l’itération suivante dans une boucle répétitive la condition de passage est testée à nouveau évite l'écriture d'un sinon
while (i<10) {.......;
.......;if (n<0) continue; /* on va en fin de bloc */
.......; /* traitement si n >= 0 */
}
81
5 – Compléments
Packages, tableaux, chaînes, exceptions
82
Les packages
Un package regroupe des classes et des interfaces qui ont un lien logique
Les classes d’un même paquetage sont dispersées dans plusieurs fichiers sources dont la 1ère ligne est :
package nom-de-paquetage;
Pour utiliser une classe d'un package existant soit il faut la préfixer avec le nom du package soit on utilise la directive import :
import java.util.* importe toutes les classes du package import java.util.Vector importe la classe Vector du
package java.util Exemple de packages inclus dans l’API du SDK : java.lang
java.io java.util java.net
83
Package standard
L’API Java : ensemble de classes prédéfinies d’usage général que l’on retrouve sur toutes les plates-formes
java.lang : classes de base du langage Chaînes, math, processus, exceptions…
java.util : structures de données Vecteurs, piles, tables, parcours…
java.io : entrées sorties classiques clavier, écran, fichiers,…
java.awt : IHM (fénêtrage, événements, graphiques) java.net : communication internet (manipulation d’URL,
sockets) java.applet : insertion de programmes dans des doc
HTML
84
Les packages (2)
Pour créer son propre package il faut ajouter package <nom_package> dans
chaque fichier source.java des classes qui vont composer le package
il faut s'assurer qu'il n'existe pas de classes homonymes au sein d’un même package
Lorsqu'on ne spécifie pas de package dans un fichier source, les classes créées appartiennent au package par défaut
85
Les chaînes
La chaîne de caractères (String) n'est pas un type primitif mais un type dérivé de la classe racine java.lang.Object.
C'est toutefois un type dérivé particulier puisque sa représentation littérale doit être prise en compte par le langage.
Cette représentation est simplement une suite de littéraux caractères (sans les deux caractères apostrophe du début et de la fin), suite qui débute et finit avec le caractère guillemet (").
Ex.: "Une chaîne sur \ndeux lignes"
"Une cha\u00EEne avec un caractère unicode"
86
Opérations sur les chaînes de caractères
Les opérations courantes de la classe String sont : concaténation : + et += longueur : length()
String ch1="Hello";// forme abrégée de String ch1= new String("Hello" );
int n = ch1.length(); que vaut n ici ? égalité equals et equalsIgnoreCase
(et non pas == qui teste l’égalité des références)String ch2 = new String ("hello");if (ch2.equals(ch1) == true) …if (ch1. equalsIgnoreCase(ch2) == true) …
comparaison : compareTo (cf strcmp() du C) extraction de sous-chaîne : substring(int, int)
int ch2 = ch1.substring(2,5);
87
transformation en un tableau de caractères : toCharArray
changer la casse :toUpperCase et toLowerCase suppression des espaces de début et fin : trim etc.
voir l'aide pour les autres méthodes
Opérations sur les chaînes de caractères (2)
88
Exemples de manipulations de chaînes de caractères
String ch1 = "essai d'une chaine";String ch2 = new String ("Bonjour");// on récupère les 3 premiers car. de ch2:
String ch3 = ch2.substring(0,3); int n = ch3.length(); // longueur de ch1
ch2 = ch2 + " tout le monde";if (ch3.equals("Bon") == true)
… … …if (ch3.compareTo(ch1) >= 0)
… … …
String ch1 = "essai d'une chaine";String ch2 = new String ("Bonjour");// on récupère les 3 premiers car. de ch2:
String ch3 = ch2.substring(0,3); int n = ch3.length(); // longueur de ch1
ch2 = ch2 + " tout le monde";if (ch3.equals("Bon") == true)
… … …if (ch3.compareTo(ch1) >= 0)
… … …
89
LES TABLEAUX
90
Les tableaux
Déclaration : int[] a ;a est une référence vers un tableau d'entiers qui n’existe pas encore en mémoire
Instanciation de a :a= new int[10];a est désormais un tableau de 10 entiers dont les cases sont a[0], a[1], … a[9]
91
Exemple 9
public class ex9 {public static void main(String[] args) {
int [] a;int i;
a= new int [10];for(i=0;i<10;i++) a[i]=i*i;for(i=0;i<10;i++)
System.out.println(a[i]);}
}
public class ex9 {public static void main(String[] args) {
int [] a;int i;
a= new int [10];for(i=0;i<10;i++) a[i]=i*i;for(i=0;i<10;i++)
System.out.println(a[i]);}
}
92
Exemple 10
public class ex10 {public static void main(String[] args) {
int [] a={9,7,6,8,9,0};
int i;
for(i=0;i<6;i++)System.out.println(a[i]);}
}
public class ex10 {public static void main(String[] args) {
int [] a={9,7,6,8,9,0};
int i;
for(i=0;i<6;i++)System.out.println(a[i]);}
}
93
Les tableaux en Java
Sont des objets créés dynamiquement Déclaration
type nomTableau[]; ou type[] nomTableau;
Puis allocation mémoire (assignation)nomTableau = new type[tailleTableau];
Déclaration et allocation mémoire type nomTableau[] = new type[tailleTableau];
Déclaration et initialisation type nomTableau[] = {val1, val2, val3,...valn};
94
Les tableaux
Comme en C,l'indice du premier élément est 0 Le champ length d'un tableau donne la dimension
du tableau Le nb de cases allouées Pas le nb de case remplies !
Par sécurité, Java déclenche les exceptions ArrayIndexOutOfBoundsException si le rang d'un
élément est invalide NegativeArraySizeException si la taille est négative à la
création du tableau ArrayStoreException si on tente de stocker un élément
de type incompatible
95
Les tableaux : exemple
// déclarationString tabJour[] = {"Lundi","Mardi","Mercredi"};short [ ][ ]mat = {{5, 2, 33,-8}, {1, 2, 3, -7}};int [ ] tabVide = {};int tabEntiers[] = new int[5];
// parcours
for(i=0;i<tabEntiers.length;i++)
tabEntiers[i]=i+1;for(lig=0;lig<2;lig++)
for (col=0;col<4;col++)
...
96
Les tableaux
Un tableau est en fait une référence, donc: il faut penser à l'allocation mémoire sauf s'il est
initialisé à la déclaration il peut être modifié s'il est passé en argument à une
méthode une méthode de classe peut retourner un tableau l'affectation entre tableaux de même type porte sur
les références (la copie physique se fait par la méthode arraycopy de la classe System)
Ne pas oublier: en Java il y a une gestion automatique de la mémoire
97
LES EXCEPTIONS
98
LES EXCEPTIONS
Les anomalies sont gérées en Java à l’aide des exceptions.
Une exception est un événement inattendu lors de l’exécution d’un programme.
Avantage : séparation nette du traitement d’erreur du code normal.
99
Les exceptions (2)
Principe Si on appelle une méthode susceptible de lancer
une exception, on se porte candidat par le bloc try si une erreur survient dans la méthode appelée,
cette dernière lance une exception par throw l'appelant intercepte l'exception grâce au bloc
gestionnaire d'exception catch il y a un gestionnaire par type d'exception le bloc finally est exécuté dans tout les cas et
en dernier s'il existe
100
LES EXCEPTIONS
Mécanisme
Une méthode lance une exception, un gestionnaire d’exception la capture.
objet Exception
OUIOUI NONNON
Gestionnairepour cetteexception?
objet Exception
OUIOUI NONNON
Gestionnairepour cetteexception?
Exceptionex
méthode4 lance une exception; méthode1 la capture.
méthode2
// appelle méthode3
méthode2
// appelle méthode3
méthode1 //gère ex
// appelle méthode2
méthode1 //gère ex
// appelle méthode2
méthode3
// appelle méthode4
méthode3
// appelle méthode4
méthode4
101
Les exceptions (3)
Schéma général de traitement des exceptions try { // bloc de code pouvant générer l'exception } catch(TypeException1 e){ // traitement approprié pour ce type d'exception } catch(TypeException2 e) { // traitement approprié pour ce type d'exception}finally {
// bloc facultatif mais toujours exécuté si présent }
try { // bloc de code pouvant générer l'exception } catch(TypeException1 e){ // traitement approprié pour ce type d'exception } catch(TypeException2 e) { // traitement approprié pour ce type d'exception}finally {
// bloc facultatif mais toujours exécuté si présent }
102
Interception d'une exception
void Methode() throws T
{
...
if (probleme)
throw new T();
...
}
void Methode() throws T
{
...
if (probleme)
throw new T();
...
}
type T de l'exception
try {
Methode();
}
catch (T param){
...
}
...
...
103
Toutes les erreurs et les exceptions sont des instances dérivées de la classe Throwable
Throwable
Error Exception
Erreurs internes à Erreurs internes à Java Java
(chargement d’une (chargement d’une classe impossible, classe impossible, …)…)
Exceptions Exceptions capturées et géréescapturées et gérées
(lecture après la fin (lecture après la fin de fichier, URL mal de fichier, URL mal
formatée, …)formatée, …)Erreur de programmationErreur de programmation
(division par 0, …) (division par 0, …)
RuntimeException
Exceptions contrôlées,Exceptions non contrôlées, Erreurs
Ne pas les utiliserNe pas les utiliserNe pas les utiliserNe pas les utiliser Gestion ou non Gestion ou non dans le codedans le code
Gestion ou non Gestion ou non dans le codedans le code
Les exceptions créées Les exceptions créées
appartiennent à cette classeappartiennent à cette classe
Les exceptions créées Les exceptions créées
appartiennent à cette classeappartiennent à cette classe
104
EXEMPLE
try {
// peut lancer MalformedURLException
URL u = new URL(str);
// peut lancer IOException
URLConnection c = u.openConnection();
}
catch (MalformedURLException e) {
System.err.println("Impossible d'ouvrir URL: " +
e);
}
catch (IOException e) {
System.err.println("connexion impossible: " + e);
}
105
EXEMPLE
void myMethod () {
try {
getSomething();
} catch (IndexOutOfBoundsException e) {
System.out.println("Capture IOException ");
} catch (Exception e) {
System.out.println("Capture Exception ");
} finally {
System.out.println("Pas d’autres exceptions ");
}
System.out.println("Goodbye");
}
Si getSomething() lance une exception Si getSomething() lance une exception IllegalArgumentException : :
Capture ExceptionCapture Exception
Pas d’autres exceptionsPas d’autres exceptions
GoodbyeGoodbye
106
Les exceptions (4)
Si une méthode est susceptible de générer des exceptions propagées vers l'appelant on déclare dans son en-tête les exceptions qu'elle peut
lancer par throws TypeExc1, TypeExc2 ,.. (mais les exceptions héritant de Error ou de RuntimeException ne se déclarent pas)
l'exception est lancée par throw <exception> soit il s'agit d'une instance de la hiérachie Exception soit il s'agit d'une instance d'une classe personnelle d'exception
qui doit héritée de Exception
107
Propagation d’une exception
vers la méthode appelante : throwspublic int myMethod() throws exception1 {
// code pouvant lancer exception1}
public URL changeURL(URL ancienneURL)
throws MalformedURLException {
return new URL("http://www.oracle.com");
}
La méthode ne capture pas l’exception La méthode ne capture pas l’exception localement.localement.
Elle est transférée à la méthode qui a Elle est transférée à la méthode qui a appelé changeURL()appelé changeURL()
108
Les exceptions (5)
Capture des exceptions par l'appelant se fait par le gestionnaire catch pour le type voulu si on souhaite que le gestionnaire traite tout type
d'exception, on indique Exception comme typecatch (Exception e)
si une exception n'est pas traitée à un niveau (gestionnaire absent ou de type inadapté), sa gestion est déléguée au niveau supérieur (throws)
si l'exception sort de la méthode main sans être gérée, elle est alors traitée par la machine Java
109
……
trytry
{{
openConnection();openConnection();
}}
catch (IOException e) {catch (IOException e) {
……
}}
finally {finally {
……
}}
……
void openConnection()void openConnection()
throws IOExceptionthrows IOException
{{
……
sendRequest();sendRequest();
……
}}
void sendRequest()void sendRequest()
throws IOExceptionthrows IOException
{{
write(header);write(header);
write(body); write(body);
}}
PROPAGATION
erreurerreurerreurerreur
110
Création d’une exception public class exception1 extends Exception { … }
public class UserFileException extends Exception {
public UserFileException (String message) {
super(message);
}
}
Gestion d’une exception (1/3)
111
Capturer une exception et lancer une exception différente
catch (exception1 e) {
throw new exception2(…);
} void ReadUserFile throws UserFileException {
try {
// code pour ouvrir et lire un fichier
}
catch(IOException e) {
throw new UserFileException(e.toString());
}
}
Gestion d’une exception (2/3)
112
Pour lancer une exception trouver la classe d’exception (ou en créer
une), créer une instance de cette classe ‘lancer’ l’instance à l’aide de throws
String readData(dataInput in) throws EOFException {… while(…) { if (ch ==-1) // EOF rencontrée
{ if (n < len) // len: nombre de caractères attendus; n nombre lusthrow new EOFException();}…
}return s;}
Gestion d’une exception (3/3)
113
Les exceptions
Permet le traitement uniforme et structuré des anomalies survenant lors de l'exécution d'un programme Exemple : lecture/écriture au-delà du dernier élément du
tableau
L'arrêt du programme est propre On peut même intercepter ces exceptions via un
mécanisme identique à celui du C++
Par contre en Java, toutes les exceptions sont des objets de la classe Exception
114
Entrées / Sorties en mode Texte
115
Sortie écran en mode texte
Le package System comprend 3 canaux d'E/S écran out clavier in erreurs err
Pour l'affichage à l'écran on utilise 2 méthodes System.out.print et System.out.println
qui fait un saut de ligne après l'affichage Ces 2 méthodes ont pour argument une chaîne de
caractères toute variable, son type, peut être concaténée
avec l'opérateur + pour former la chaîne d'affichage
116
Sortie écran en mode texte : exemple
class TestAffichage { public static void main(String[] argv) { // variables locales int x = 3; char c='o'; float z = -2.45E-3F; String ch = "essai"; // affichage System.out.println("x= "+x+" et z= "+z); System.out.println("\nc = "+c+" et ch= "+ ch); }}
117
Entrée clavier en mode texte
La saisie en mode texte est compliquée
Utilisation du package : java.io.*
Utilisation de la classe BufferedReader pour la lecture du flux d'entrée1) déclaration d’un buffer d’entrée
2) saisie d’une chaîne par la méthode readLine()
3) conversion de la chaîne saisie dans le type recherché
Mise en oeuvre d'une gestion des exceptions
118
Entrée clavier en mode texte : exemple 1/2
import java.io.*;class TestSaisie { public static void main(String args[]) throws IOException { InputStreamReader isr = new InputStreamReader(System.in);BufferedReader rep = new BufferedReader(isr);
System.out.print("Entrez une chaine: ");String saisie = rep.readLine();System.out.println("Voici la chaine saisie:
"+ saisie);
System.out.print("Entrez un entier: ");int i = Integer.parseInt(rep.readLine());
System.out.println("l'entier i = "+ i);
déclaration d’un buffer d’entrée
saisie d’une chaîne
conversion dans le type recherché
119
Entrée clavier en mode texte : exemple 2/2
System.out.print("Entrez un reel : ");float f = Float.parseFloat(rep.readLine());System.out.println("le reel f = "+ f);
// cas d'un caractèreSystem.out.print("Entrez un caractere : ");String valeur = rep.readLine() ;char c = valeur.charAt(0);
System.out.println("le caractere vaut = "+ c);
} // public static void main
} // class TestSaisie
Utilisation d’une méthode de classe qui retourne un caractère d’une
chaîne :String.charAt(int)
120
Entrée clavier en mode texte
Exemple avec gestion des exceptionsimport java.io.*;class TestSaisieExcep{ public static void main(String args[] { // saisie d'un réel avec gestion des exceptions int x = 0; // entier à saisir System.out.print("Entrez un entier : ");
try { InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader rep = new BufferedReader(isr);x = Integer.parseInt(rep.readLine());
}
121
Entrée clavier en mode texte
Exemple avec gestion des exceptions (suite)// exception éventuellement générée par readLinecatch (IOException e){
System.out.println("ERREUR DE SAISIE \n\n");}
// exception éventuellement générée par parseIntcatch (NumberFormatException e){
System.out.println("ERREUR DE TYPE \n\n");}
System.out.println("l'entier vaut : "+ x);
} // public static void main
} // class TestSaisie
122
Application
Définition d'un tableau de taille dynamiqueavec remplissage aléatoireimport java.io.*;import java.util.*;
class TestTableau { public static void main(String[] argv)throws IOException {
// saisie de la dimension du tableau InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader rep = new BufferedReader(isr);System.out.print("Entrez un entier : ");int taille = Integer.parseInt(rep.readLine());
123
Application
Définition d'un tableau de taille dynamiqueavec remplissage aléatoire // dimensionnement dynamique du tableau d'entiers int tabEntiers [] = new int[taille];
// remplissage aléatoire d'entiers compris entre 0 et 50 Random r = new Random(); for(int i=0;i<tabEntiers.length;i++)
tabEntiers[i]=Math.abs(r.nextInt()%51);
// affichage du tableau for(int i=0;i<tabEntiers.length;i++) System.out.println("\n "+tabEntiers[i]);
} // fin de main} // fin de TestTableau