123
1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

Embed Size (px)

Citation preview

Page 1: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

1

Chapitre I

(Merci à Alain PILLOT pour son cours !)

Présentation du langage Java

Page 2: 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

Page 3: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 4: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 5: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 6: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

6

1 - Généralités

Page 7: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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…

Page 8: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 9: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 10: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 11: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 12: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 13: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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)

Page 14: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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)

Page 15: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 16: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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.

Page 17: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

17

2 – Développer avec Java

Page 18: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage 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

Page 19: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 20: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 21: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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>

Page 22: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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!"); }}

Page 23: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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 !

Page 24: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 25: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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.

Page 26: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 27: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 28: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage 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.

Page 29: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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" …>

Page 30: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 31: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

31

3 - Éléments du langage

Page 32: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 33: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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 )

Page 34: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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;

Page 35: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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();

Page 36: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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é

Page 37: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 38: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 39: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 40: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 41: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 42: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 43: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 44: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 45: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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 - -

Page 46: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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 \

Page 47: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 48: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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;

Page 49: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 50: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 51: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 52: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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);}

}

Page 53: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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()

Page 54: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 55: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 56: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 57: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 58: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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)

Page 59: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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()

Page 60: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 61: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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'

Page 62: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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;

Page 63: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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 '

Page 64: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

64

Les opérateurs

Opérateur d'affectation=

Opérateurs arithmétiques + - * / % ++ -- += -= *= /= %=

Opérateurs relationnels > >= == != < <=

Opérateurs logiques && || !

Opérateurs binaires & | ^ ~ >> << >>>

Page 65: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 66: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

66

Priorité des opérateurs

Opérateur par ordre décroissant et de gauche à droite . [] () new ++ -- ! ~ instanceof * / % + - << >> >>> < > <= >= == != & ^ | && || ?: = *= /= %= += -= <<= >>= >>>= &= ^= |= ,

Page 67: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

67

Opérations sur les caractères

La classe Character possède les méthodes statiques utiles : isDigit() isJavaLetter() isLowerCase() toUpperCase()

Page 68: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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);

}}

Page 69: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 70: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 71: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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 !!!!");}

}

Page 72: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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);

}}

Page 73: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

73

4 – Les structures de contrôle

Page 74: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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>

Page 75: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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: ......;......;

}

Page 76: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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++;

}

Page 77: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 78: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 79: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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 */}

Page 80: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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 */

}

Page 81: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

81

5 – Compléments

Packages, tableaux, chaînes, exceptions

Page 82: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 83: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 84: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 85: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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"

Page 86: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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);

Page 87: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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)

Page 88: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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)

… … …

Page 89: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

89

LES TABLEAUX

Page 90: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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]

Page 91: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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]);}

}

Page 92: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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]);}

}

Page 93: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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};

Page 94: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 95: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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++)

...

Page 96: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 97: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

97

LES EXCEPTIONS

Page 98: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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.

Page 99: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 100: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 101: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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 }

Page 102: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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){

...

}

...

...

Page 103: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 104: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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);

}

Page 105: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 106: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 107: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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()

Page 108: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 109: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage 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

Page 110: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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)

Page 111: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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)

Page 112: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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)

Page 113: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 114: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

114

Entrées / Sorties en mode Texte

Page 115: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 116: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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); }}

Page 117: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 118: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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é

Page 119: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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)

Page 120: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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());

}

Page 121: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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

Page 122: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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());

Page 123: 1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java

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