La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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

Présentations similaires


Présentation au sujet: "1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java."— Transcription de la présentation:

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

2 2 PLAN du Module Java Chapitre 1 – Les bases de Java Les bases, introduction, la syntaxe java Chapitre 2 - Programmation orientée Objet avec Java Chapitre 3 – Environnement Java Plateforme java, Sécurité dans java Chapitre 4 – Les interfaces en Java Chapitre 5 – les JavaBeans

3 3 Références bibliographiques Flanagan et Gachet, Java in a nutshell (Java1.4), 4ème édition (en français), OREILLY, 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 4 Sites java Pour les développeurs : (gratuit mais il faut senregistrer) Sur la plateforme distribuée en java : incluant onjava.com Tous les exemples du livre « Java in a nutshell » sont téléchargeables sur :

5 5 Sites Java (2) à vérifier Normes de programmation en Java : NormesJAVA.html NormesJAVA.html /index.html

6 6 1 - Généralités

7 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 lidé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 8 Caractéristiques générales (1) Java est donc un langage de programmation proposé par Sun Microsystems à partir des années 95 Cest un langage " à objets " classes objets messages héritage programmation objet uniquement

9 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 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 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 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 dune classe : paquetage classes champs méthodes Variables locales Variables globales instances

13 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 14 Localisation des déclarations de variables : libre Compilateur Java plus souple : les méthodes peuvent être invoquées alors quelles ne sont définies quaprè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 darguments La surcharge permet den simuler le fonctionnement On peut aussi transmettre les arguments sous forme dun tableau Object Différences C et Java (3)

15 15 JAVA VERSUS C/C++ Pas de pointeurs Pas de conversions automatiques de types Pas dhéritage multiples pour les classes ( interfaces) Pas de surcharge des opérateurs Pas de variables globales Pas de pré-processeur …… Pas de structures ni dunions, 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 lordinateur

16 16 LAVENIR DE JAVA Les Java beans Tentatives duniformisation de composants réutilisables et configurables à laide doutils. 100 % Pure Java Mise en place par Sun dune politique de certification dapplication 100% pure Java. Les puces Java Microprocesseur « spécialisé » destiné à combler le manque de performance de Java.

17 17 2 – Développer avec Java

18 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 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 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 HTML afin d'effectuer des traitements sur le poste client

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

22 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 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 24 Chaîne de développement (4) Compilation et exécution avec le SDK $javac HelloWorld.java $java HelloWorld Hello World! $ S'il n'y a pas d'erreur, le compilateur produit un fichier ".class" par classe définie dans le fichier

25 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 lexemple : 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 26 Chaîne de développement (5) HelloWorld.java javac HelloWorld.java HelloWorld.class Fichier source Programme compilé (p-code) Programme compilé (p-code) Compilation Moteur dinterprétation p-code Registres / piles virtuels Machine virtuelle Java Système d'Exploitation Unix, Windows, Mac, etc. java HelloWorld Source P.Emy CERTA

27 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 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 LIDE (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 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

30 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é lest Nom de la classe Type retourné par la méthode Nom et type de largument Affichage à lécran de s

31 Éléments du langage

32 32 Mots réservés en Java

33 33 Les identificateurs Identificateur = nom des différents éléments du programme Variableex: totalGeneral constanteex: TAILLE méthodeex: int getX() classeex: 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, p as de caractères de ponctuation )

34 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 dun mot, tous les mots commencent par des majuscules : class ImageAnimee; Attributs : commencent par ( un symbole de soulignement puis ) une minuscule int _rayonCercle;

35 35 Règles (suite) Variables : commencent par une lettre minuscule int largeurCercle; Constantes : tout en majuscules et underscore LARGEUR_MAXIMALE = 50 ; Méthodes : verbe à l'infinitif (suivi éventuellement d'un complément) ; commence par une minuscule, puis Maj à chaque nouveau mot void decalerAGauche(); Le complément peut avoir plus d'un mot. Les méthodes daccès aux attributs doivent commencer par get ou set et être suivi par le nom de l'attribut : deplacerForme(); envoyerMessageATous(); setLargeur(); getLargeur();

36 36 Les symboles Caractères ou groupe de caractères pour 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 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 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 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 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 import package java.awt; import java.awt.peer.CanvasPeer; 3) La déclaration de la classe ou de l'interface

41 41 Codage caractères pour Java ASCII 7 bits (permet de représenter solo langlais) 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 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 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 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écimaux Ex.: \u2203 correspond au caractère il existe Booléens: type boolean (true/false) codé sur 1 bit

45 45 Les types primitifs

46 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 signifieblanc ( identique à ' ' ) \u0041 signifie A ( identique à 'A' ) \ signifie \\ signifie \

47 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) en octale

48 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 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 50 Valeurs limites Codage = approximation numérique, doù 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 51 Dépassement de valeurs Exemple : byte b1=127,b2=1; byte sum=b1+b2; Ne génère pas dexception ! int a=23; int b=0; float x= (float) a/b; X vaut linfini positif !! Sauf pour : division entière par zéro modulo par zéro ArithmeticException

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

53 53 Explications Le fichier s'appelle ex1.java Ce fichier contient une classe publique ex1 ex1 contient une méthode publique et statique main : public static void main(String[] args) Le programme exécute cette fonction main()

54 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() Cest par elle que débutera linterpréteur Java public static void main() : obligatoire Une applet : le pgm Java nest pas exécuté directement par linterpré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 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 56 Machine virtuelle java Rend le code java portable sur toutes les machines Elle traduit à la volée le code java Elle implémente les fonctions d'entrée sorties des packages

57 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 58 Conversion de types Boolean est le seul type primitif qui ne peut être converti en autre type primitif Java Cependant attention ! char nest 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 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 60 Les variables Déclaration identique au C++ unType var1[,var2,…]; unType var1=val1[,var2=val2,var3,…]; Une variable représente : lattribut d'une classe une variable de classe une variable locale à une méthode de classe Caractéristiques : conversion toujours explicite et identique au C var1 = (type_force) var2; portée limitée au bloc { } de déclaration

61 61 Les variables Exemples : boolean encore = true; // initialisation à vrai int x = 10; // decimal int x = 0x0A; // hexadécimal int x = 10L; // entier long float y = F; // 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 = D; // réel double précision char rep = 'n'; char rep = '\u006e'; // code ASCII de 'n'

62 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 = D; Une constante de classe est définie à l'aide de static final Exemple: static final float PI = F;

63 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 64 Les opérateurs Opérateur d'affectation = Opérateurs arithmétiques + - * / % = -= *= /= %= Opérateurs relationnels > >= == != < <= Opérateurs logiques && || ! Opérateurs binaires & | ^ ~ >> >>

65 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 66 Priorité des opérateurs

67 67 Opérations sur les caractères La classe Character possède les méthodes statiques utiles : isDigit() isJavaLetter() isLowerCase() toUpperCase()

68 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 = ; d = L; System.out.println(a); System.out.println(b); System.out.println(c); System.out.println(d); } }

69 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 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); } } Affiche : TRUE FALSE

71 71 Exemple 5 public class ex5 { public static void main(String[] args) { char c; c='5'; if ((c>'0') && (c<='9')) System.out.println("cest un chiffre !!!!"); } }

72 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-=bk=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 73 4 – Les structures de contrôle

74 74 Les structures de contrôle L'alternative if ( ) else (un bloc commence par { et finit par }) Alternatives imbriquées if ( ) else if ( ) else if (expr3>) else

75 75 Les structures de contrôle Le choix multiple switch ( ) { case valeur_1:......; break; case valeur_2:......;......; case valeur-n:......;......; break; default:......;......; }

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

77 77 Les structures de contrôle L'itération bornée traduction du pour for( ; ; ) 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 78 Les structures de contrôle La répétitive tant que while( ) expression condition de maintien nombre de passages 0 à n La répétitive répéter …tant que do while ( ) ; nombre de passages 1 à n

79 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 80 Les structures de contrôle L'instruction continue force le passage à lité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 81 5 – Compléments Packages, tableaux, chaînes, exceptions

82 82 Les packages Un package regroupe des classes et des interfaces qui ont un lien logique Les classes dun 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 V ector du package java.util Exemple de packages inclus dans lAPI du SDK : java.lang java.io java.util java.net

83 83 Package standard LAPI Java : ensemble de classes prédéfinies dusage général que lon 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 dURL, sockets) java.applet : insertion de programmes dans des doc HTML

84 84 Les packages (2) Pour créer son propre package il faut ajouter 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 dun 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 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 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 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 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) … … …

89 89 LES TABLEAUX

90 90 Les tableaux Déclaration : int[] a ; a est une référence vers un tableau d'entiers qui nexiste 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 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]); } }

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

93 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 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 95 Les tableaux : exemple // déclaration String 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

96 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 97 LES EXCEPTIONS

98 98 LES EXCEPTIONS Les anomalies sont gérées en Java à laide des exceptions. Une exception est un événement inattendu lors de lexécution dun programme. Avantage : séparation nette du traitement derreur du code normal.

99 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 100 LES EXCEPTIONS Mécanisme Une méthode lance une exception, un gestionnaire dexception la capture. Exception ex 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 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 102 Interception d'une exception void Methode() throws T {... if (probleme) throw new T();... } type T de l'exception try { Methode(); } catch (T param) {... }...

103 103 Toutes les erreurs et les exceptions sont des instances dérivées de la classe Throwable Throwable ErrorException Erreurs internes à Java (chargement dune classe impossible, …) Exceptions capturées et gérées (lecture après la fin de fichier, URL mal formatée, …) Erreur de programmation (division par 0, …) RuntimeException Exceptions contrôlées, Exceptions non contrôlées, Erreurs Ne pas les utiliser Gestion ou non dans le code Gestion ou non dans le code Les exceptions créées appartiennent à cette classe Les exceptions créées appartiennent à cette classe

104 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 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 dautres exceptions "); } System.out.println("Goodbye"); } Si getSomething() lance une exception : Si getSomething() lance une exception IllegalArgumentException : Capture Exception Pas dautres exceptions Goodbye

106 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 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 107 Propagation dune exception vers la méthode appelante : throws public 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 lexception localement. Elle est transférée à la méthode qui a appelé changeURL()

108 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 type catch (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 109 …try{openConnection();} catch (IOException e) { …} finally { …}… void openConnection() throws IOException {…sendRequest();…} void sendRequest() throws IOException {write(header);write(body);} PROPAGATION erreurerreur

110 110 Création dune exception public class exception1 extends Exception { … } public class UserFileException extends Exception { public UserFileException (String message) { super(message); } } Gestion dune exception (1/3)

111 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 dune exception (2/3)

112 112 Pour lancer une exception trouver la classe dexception (ou en créer une), créer une instance de cette classe lancer linstance à laide 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 lus throw new EOFException(); } … } return s; } Gestion dune exception (3/3)

113 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 114 Entrées / Sorties en mode Texte

115 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 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 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ée 1) déclaration dun buffer dentrée 2) saisie dune 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 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 dun buffer dentrée saisie dune chaîne conversion dans le type recherché

119 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ère System.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 dune méthode de classe qui retourne un caractère dune chaîne : String.charAt(int)

120 120 Entrée clavier en mode texte Exemple avec gestion des exceptions import 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 121 Entrée clavier en mode texte Exemple avec gestion des exceptions (suite) // exception éventuellement générée par readLine catch (IOException e) { System.out.println("ERREUR DE SAISIE \n\n"); } // exception éventuellement générée par parseInt catch (NumberFormatException e) { System.out.println("ERREUR DE TYPE \n\n"); } System.out.println("l'entier vaut : "+ x); } // public static void main } // class TestSaisie

122 122 Application Définition d'un tableau de taille dynamique avec remplissage aléatoire import 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 123 Application Définition d'un tableau de taille dynamique avec 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


Télécharger ppt "1 Chapitre I (Merci à Alain PILLOT pour son cours !) Présentation du langage Java."

Présentations similaires


Annonces Google