Poly Copie Java

510
- Ecole Nationale Supérieure d'Ingénieurs de Caen - © dp - 1 - JAVA programmation objet Patrick Ducrot [email protected] http://www.ducrot.org/java/PolycopieJAVA.pdf

description

Poly Copie Java

Transcript of Poly Copie Java

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 1 -

    JAVA

    programmation objetPatrick Ducrot

    [email protected] http://www.ducrot.org/java/PolycopieJAVA.pdf

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 2 -

    Plan du document (1/2) Gnralits 4 Syntaxe de base 21 Concepts objets, classes, constructeurs, destructeurs, surcharge 29 Hritage, interface, package, droits d'accs 44 Conversion de type, gestion des exceptions 65 javadoc, le gnrateur de documentation 77 Le format d'archive jar 83 Gestion de fichiers, flux d'entre/sortie, srialisation, java.nio 86 Les threads 119 Les collections 132 Les nouveauts de la version 5 143 Quelques nouveauts de la version 8 172 Les applets 190 Les interfaces utilisateurs avec le package java.awt 208 Gestion des vnements 249 Le package javax.swing 271 Java et la scurit 303 Obfuscation de code 320 Programmation rseau 326 Remote Method Invocation 342 ant 358 Interaction Java/Base de donnes 369 JavaBeans 382

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 3 -

    Plan du document (2/2)

    Les servlets 435

    Java Server Pages 465 Java Native Interface 490

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 4 -

    Gnralits

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 5 -

    Gnralits

    l Langage conu par les ingnieurs de SUN Microsystem (socit rachete par Oracle en avril 2009)

    l Dfinition de SUN : "Java est un langage

    simple, orient objet, distribu, robuste, sr, indpendant des architectures matrielles, portable, de haute performance, multithread et dynamique"

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 6 -

    Gnralits Simple

    Inspir du C++, Fortran, Lisp, Smalltalk Pas de pointeur; pas de surcharge d'oprateurs; pas d'hritage

    multiple Prsence d'un "garbage collector"

    Orient objet La programmation objet modlise des objets ayant un tat

    (ensemble de variables) et des mthodes (fonctions) qui leur sont propres. Lunit de base en Java est la classe. Un des intrts de Java est de disposer de nombreuses classes dj faites. Un objet cr partir dune classe est une instance.

    Distribu Les fonctions d'accs au rseau et les protocoles internet les

    plus courants sont intgrs.

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 7 -

    Gnralits Robuste

    Typage des donnes trs strict Pas de pointeur

    Sr Java nest pas compil destination dun processeur

    particulier mais en byte code qui pourra tre ensuite interprt sur une machine virtuelle Java (JVM = Java Virtual Machine). Le "byte code" gnr est vrifi par les interprtateurs java avant excution.

    U n d b o r d e m e n t d e t a b l e a u d c l e n c h e r a automatiquement une exception.

    Labsence darithmtique de pointeur vite les malversations.

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 8 -

    Gnralits Portable

    Les types de donnes sont indpendants de la plate forme (par exemple les types numriques sont dfinis indpendamment du type de plate forme sur laquelle le byte code sera interprte).

    Haute performance Java est un langage pseudo interprt Techniques de "Just in Time" (JIT) amliorent ces

    performances

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 9 -

    Gnralits

    Multi thread Une application peut tre dcompose en units

    d'excution fonctionnant simultanment

    Dynamique Les classes Java peuvent tre modifies sans avoir

    modifier le programme qui les utilise.

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 10 -

    Les diffrentes version de java Java 1.0 (23 janvier 1996)

    8 Packages 212 Classes et Interfaces 1545 Mthodes

    Java 1.1 (19 fvrier 1997) 23 Packages 504 Classes et Interfaces 3 851 Mthodes

    Java 1.2 (Java 2) (9 dcembre 1998) 60 Packages 1 781 Classes et Interfaces 15 060 Mthodes

    Et bien plus dans les versions 1.3 (8 mai 2000), 1.4 (6 fvrier 2002), 1.5 (tiger, 30 septembre 2004) ,1.6 (mustang, 11 dcembre 2006), 1.7 le 28 juillet 2011 (OpenSource et sous lre Oracle).

    Dernire version: 1.8 le 18 mars 2014 Prochaines versions attendues en 2016 (V9) et 2018 (V10)

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 11 -

    Les outils de dveloppement

    l Quelques environnements java:

    Java SE (Standard Edition)

    Java ME (Mobile Edition)

    Java EE (Enterprise Edition)

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 12 -

    L'environnement J2SE l Loutil de base: le JDK (Java Development Kit) de SUN:

    http://java.sun.com (lien redirig sur le site dOracle). gratuit comprend de nombreux outils:

    le compilateur: javac linterprteur dapplication: java linterprteur dapplet: appletviewer le dbogueur: jdb le gnrateur de documentation: javadoc etc.

    l Des environnements de dveloppement: http://www.eclipse.org http://www.netbeans.org/

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 13 -

    Utilisation de JAVA

    l Le langage Java peut gnrer :

    des applications des applets des servlets des midlets etc.

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 14 -

    Gnration de code excutable dans les langages de programmation

    l Le code est gnr par un compilateur en plusieurs tapes:

    Vrification syntaxique. Vrification smantique (typage). Production de code dans un langage plus proche

    de la machine.

    Production de briques de code assemblables.

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 15 -

    Gnration de code excutable dans les langages de programmation

    Compilation

    Code Source

    Code Source

    Code Objet

    Code Excutable

    Code Objet

    Edition de liens

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 16 -

    Gnration de code excutable dans les langages de programmation

    l Avantages/inconvnients du code natif

    Rapidit dexcution

    Ncessit de recompiler lors du portage dun logiciel sur une autre architecture/systme dexploitation

    Choix de la distribution du logiciel: source ou binaire?

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 17 -

    Gnration de code en java

    Compilation : javac

    Code source .java

    Code source .java

    Code objet .class

    Code objet .class

    JVM

    Excution

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 18 -

    Principe Machine Virtuelle

    Bytecode

    Interprte sous Windows

    Interprte sous linux

    Interprte sous solaris

    Code source

    Compilateur sous windows

    Compilateur sous linux Compilateur sous solaris

    Interprte sous Mac OS

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 19 -

    Avantages/Inconvnients du bytecode

    l Code portable au niveau binaire

    l Moins efficace que du code natif (mais compens par la technologie JIT)

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 20 -

    Exemple dapplication

    l Fichier: First.java public class First {

    public static void main (String args []) {

    System.out.println ("Premier exemple") ; }

    }

    l Compilation: javac First.java Cration de First.class

    l Excution: java First

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 21 -

    Syntaxe de base

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 22 -

    Syntaxe de base du langage Java

    l Les commentaires existent sous plusieurs formes: Commentaires multi lignes

    /* */

    Commentaires sur une seule ou fraction de ligne //

    Commentaires destins au gnrateur de documentation javadoc

    /** * * */

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 23 -

    Type de donnes prdfinis l Nombres entiers

    byte -2^7 , (2^7 )-1 -128,127 short -2^15 , (2^15) -1 -32768,32767 int -2^31 , (2^31) - 1 -2147483648, 2147483647 long -2^63 , (2^63) - 1

    9223372036854775808, 9223372036854775807

    Les entiers peuvent tre exprims en octal ( 0323), en dcimal (311) ou en hexadcimal (0x137).

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 24 -

    Type de donnes prdfinis l Nombres rels

    float simple prcision sur 32 bits 1.4023984 e-45 3.40282347 e38

    double double prcision sur 64 bits 4.94065645841243544 e-324 1.79769313486231570 e308

    Reprsentation des rels dans le standard IEEE 754Un suffixe f ou d aprs une valeur numrique permet de spcifier le type.

    Exemples : double x = 145.56d ; float y = 23.4f ; float f = 23.65 ; // Erreur

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 25 -

    Type de donnes prdfinis l boolean

    Valeurs true et false Un entier non nul est galement assimil true Un entier nul est assimil false

    l char Une variable de type char contient un seul caractre cod sur 16 bits (jeu de

    caractres 16 bits Unicode contenant 34168 caractres).

    Des caractres d'chappement existent : \b Backspace \t Tabulation horizontale \n Line Feed \f Form Feed \r Carriage Return \" Guillemet \' Apostrophe \\ BackSlash \xdd Valeur hexadcimale \ddd Valeur octale \u00xx Caractre Unicode (xx est compris entre 00 et FF)

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 26 -

    Types de donnes prdfinis l Chanes de caractres

    Les chanes de caractres sont manipules par la classe String ; ce n'est donc pas un type scalaire, mais il sen approche beaucoup dans son utilisation.

    Exemple : String str = "exemple de chane de caractres" ; String chaine = "Le soleil " + "brille" ; // Oprateur de concatnation

    Remarque: Depuis la version 1.7, il est possible dutiliser les chanes de caractres dans les structures switch/case

    Exemple: String chaine= " " ; switch (chaine) {

    case "Bonjour" : System.out.println ("Je suis poli") ; break ;

    default: System.out.println("Je suis impoli") ; }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 27 -

    Les tableaux l Les tableaux peuvent tre dclars suivant les syntaxes suivantes :

    type [ ] nom ; type nom [ ] ;

    Exemples : int table [ ] ; double [ ] d1,d2 ;

    Pas de tableau statique. La taille d'un tableau est alloue dynamiquement par loprateur new

    table = new int [10] ; int table2 [ ] = new int [20] ; int table3 [ ] = {1,2,3,4,5} ;

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 28 -

    Les tableaux

    La taille n'est pas modifiable et peut tre consulte par la proprit length

    System.out.println (table3.length) ; int [ ] [ ] Matrice = new int [10][20] ; System.out.println (Matrice.length) ; // 1re dimension System.out.println (Matrice[0].length) ; // 2me dimension

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 29 -

    Concepts objet, classes, constructeurs, destructeurs,

    surcharge

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 30 -

    Concepts des langages objet l Concept de base de la programmation oriente objet: la

    classe

    l Une classe modlise la structure statique (donnes membres) et le comportement dynamique (mthodes) des objets associs cette classe.

    l Un objet dune classe est appel une instance.

    l Une classe est la description dun objet. Chaque objet est cr partir dune classe (avec loprateur new).

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 31 -

    Exemple

    Utilisateur

    Nom classe

    Numero : entier Solde : nombre rel initialise (numero,montant) deposer (montant) retirer (montant) consulterSolde () afficher ()

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 32 -

    Exemple dcriture de la classe Compte

    class Compte { private int numero; private float solde;

    public void initialise (int n, float s) { numero = n ; solde = s ; } public void deposer (float montant) { solde = solde + montant; } public void retirer (float montant) { solde = solde montant; }

    public float consulterSolde ( ) { return solde; } public void afficher() { System.out.println ("Compte : " + numero + " solde: " + solde) ; } }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 33 -

    Utilisation de la classe Compte public class Banque {

    static public void main (String args []) { Compte co1 = new Compte () ; Compte co2 = new Compte () ;

    co1.initialise (1234,1000f) ; co2.initialise (5678,500f) ; co1.deposer (2100.95f) ; co1.afficher () ; co2.retirer (1000.0f) ; co2.afficher () ; }

    }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 34 -

    Reprsentation mmoire

    co1

    numero

    solde

    co2

    numero

    solde

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 35 -

    Reprsentation mmoire l co1 et co2 contiennent l'adresse des zones mmoires alloues par l'oprateur

    new pour stocker les informations relatives ces objets.

    l co1 et co2 sont des rfrences.

    l La rfrence dun objet est utilise pour accder aux donnes et fonctions membres de lobjet.

    l Un objet peut accder sa propre rfrence grce la valeur this (variable en lecture seule).

    l Une rfrence contenant la valeur null ne dsigne aucun objet.

    l Quand un objet nest plus utilis (aucune variable du programme ne contient une rfrence sur cet objet), il est automatiquement dtruit et la mmoire rcupre (garbage collector).

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 36 -

    Constructeur de classe

    l Un constructeur est une mthode automatiquement appele au moment de la cration de lobjet.

    l Un constructeur est utile pour procder a toutes les initialisations ncessaires lors de la cration de la classe.

    l Le constructeur porte le mme nom que le nom de la classe et na pas de valeur de retour.

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 37 -

    Exemple de constructeur class Compte { public Compte (int num,float s) { numero = num ; solde = s ; } . } Compte co1 = new Compte (1234, 1000,00f) ;

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 38 -

    Destructeur de classe l Un destructeur peut tre appel lorsquun objet est dtruit.

    l Le destructeur peut tre utilis pour librer des ressources spcifiques(dconnexion d'une base de donnes, fermeture d'un fichier, ). Il sera appel lorsque le garbage collector rcuprera la mmoire.

    l Un destructeur est une mthode: public void finalize ()

    l Remarque: on peut forcer lappel du garbage collector: Runtime r = Runtime.getRuntime(); r.gc();

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 39 -

    Surcharge de mthodes l Une mthode (y compris le constructeur) peut tre dfinie

    plusieurs fois avec le mme nom condition de se diffrencier par le nombre et/ou le type des paramtres transmis (polymorphisme).

    l Le compilateur dcidera de la bonne mthode utiliser en fonction des paramtres dappel.

    l Java ne supporte pas la surcharge des oprateurs (diffrence avec le C++)

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 40 -

    Exemples de surcharge de mthodes

    l Exemple1:

    class BarreDeProgression {

    private float pourcent; public void setPourcent (float valeur) { pourcent = valeur;} public void setPourcent (int effectue, int total) { pourcent = effectue/total; }

    }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 41 -

    Exemples de surcharge de mthodes

    l Exemple 2: public class Circle {

    private double x, y, r; public Circle(double x, double y, double r) {

    this.x = x; this.y = y; this.r = r; } public Circle(double r) { x = 0.0; y = 0.0; this.r = r; } public Circle(Circle c) { x = c.x; y = c.y; r = c.r; } public Circle() { x = 0.0; y = 0.0; r = 1.0; } public double circumference() { return 2 * 3.14159 * r; }

    public double area() { return 3.14159 * r*r; } }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 42 -

    Comparaison dobjets l On ne peut comparer 2 objets en comparant

    les variables dinstance.

    Exemple1 : r1 = new Rectangle (10,20); r2 = new Rectangle (30,40) ; r3 = new Rectangle (10,20) ; Comparaison des variables dinstance: r1 == r2 false r1 == r3 false Comparaison avec une mthode equals incluse dans la classe Rectangle r1.equals (r2) false r1.equals (r3) true

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 43 -

    Comparaison d'objets Exemple 2:

    Comparaison de chanes de caractres: String s1 = "Bonjour" ; String s2 = "Bonjour" ; if (s1.equals (s2)) // Compare le contenu de s1 et s2. if (s1.equalsIgnoreCase (s2)) // Compare le contenu de s1 et s2 // sans tenir compte des majuscules // et minuscules.

    l Remarque: dans le cas des chanes de caractres, il est malgr tout possible dutiliser: if (s1 == s2) pourvu que s1 est s2 aient t dfinies avec les mmes valeurs littrales ou avec la mthode intern ().

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 44 -

    Hritage, interface, package, droits

    d'accs

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 45 -

    Hritage de classe l Concept trs important dans la programmation objet.

    l Une classe peut hriter dune autre classe et apporter ses propres spcificits. Classe A

    Classe B

    Classe C

    Classe D Classe E

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 46 -

    Hritage de classe

    l Le mot cl pour dclarer une classe drive est extends.

    l Java ne supporte que lhritage simple.

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 47 -

    Exemple dhritage (1/3) // Animal.java public class Animal { private int poids; public void dormir () { System.out.println ("Mthode dormir de Animal"); } public void jouer () { System.out.println ("Mthode jouer de Animal"); public void seReproduire () { System.out.println ("Mthode sereproduire de

    Animal"); } } // Mammifere.java public class Mammifere extends Animal { public void seReproduire () { System.out.println ("Mthode seReproduire de

    Mammifre");} }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 48 -

    Exemple dhritage (2/3) // Chat.java public class Chat extends Mammifere { public void jouer () { System.out.println ("Mthode jouer de Chat");} public void miauler () { System.out.println ("Mthode miauler de Chat");} }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 49 -

    Exemple dhritage (3/3) // RunChat.java import Chat; public class RunChat { public static void main ( String []arguments) { Chat minet = new Chat(); minet.dormir(); minet.seReproduire(); minet.jouer(); } } L'excution de RunChat donnera : Mthode dormir de Animal Mthode seReproduire de Mammifre Mthode jouer de Chat Exemple extrait du cours de Stphane Bortzmeyer, [email protected]

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 50 -

    La classe de base

    l Toute classe java hrite implicitement de la classe java.lang.Object.

    l Quelques mthodes de la classe java.lang.Object:

    public boolean equals( Object obj ) ; public String toString() ;

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 51 -

    Cas particuliers de l'hritage l Une mthode peut tre prfixe par abstract. Dans ce

    cas, la classe est abstraite. Aucun objet ne peut tre instanci dune classe abstraite et les classes drives devront dfinir compltement les mthodes abstraites.

    l Le mot cl final interdit la drivation dune classe (par exemple, la classe String est final) ; appliqu une variable, celle ci ne peut pas tre modifie (constante) ; appliqu une mthode, celle ci ne peut pas tre surcharge.

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 52 -

    Hritage: mot cl "super" l Il est possible daccder aux donnes/mthodes de la classe

    de base grce au mot cl super. Exemple 1: class MaFrame extends Frame {

    // Constructeur MaFrame ( String title) {

    super ( title) ; // Appel du constructeur de Frame // Si cet appel est utilis, cest toujours // la premire instruction du constructeur } }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 53 -

    Hritage: mot cl "super" l Exemple 2: class HouseCat extends Feline

    { void speak ( ) { System.out.println (Meow !!!) ; }

    } class MagicCat extends HouseCat {

    boolean people_present ; void speak ( ) { if (people_present) super.speak ( ) ; else System.out.println (Hello) ; }

    }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 54 -

    Interface Les interfaces compensent un peu labsence dhritage multiple. Le mot cl interface remplace le mot cl class en tte de dclaration. Une interface ne peut contenir que des variables constantes ou statiques et des

    enttes de mthodes (attention: java 8 a modifi la dfinition des interfaces).

    Toutes les signatures de mthodes dune interface ont une visibilit publique. Le mot cl pour implmenter une interface est implements. Une classe implmentant une interface sengage surcharger toutes les mthodes

    dfinies dans cette interface (contrat) (en java 8: toutes les mthodes abstraites).

    Une interface permet dimposer un comportement une classe Une classe peut implmenter autant dinterfaces qu'elle le souhaite.

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 55 -

    Exemple dinterface interface Drawable { void drawMe (int x, int y); } class GraphicObject implements Drawable {

    void drawMe (int x,int y) { // Code de la fonction drawMe }

    }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 56 -

    Packages Les classes java stockes dans la bibliothques de classe ne sont

    pas automatiquement disponibles. Les packages sont des collections de classes et dinterfaces

    regroupes par thme.

    Une application peut utiliser des classes et interfaces prdfinies par importation du package concern.

    Le mot cl pour importer un package est import De nouveaux packages peuvent tre dfinis rendant le langage

    trs extensible (exemple : package java3d pour des classes graphiques en 3 dimensions).

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 57 -

    Quelques packages de base java.lang Principales classes du langage java (importation implicite) java.io E/S vers diffrents priphriques java.util Utilitaires (vecteur, hashtables,

    ) java.net Support du rseau (socket, URL,

    )

    java.awt Interface graphique java.applet Classes de base pour la

    ralisation d'une applet

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 58 -

    Exemple de manipulation de packages

    Exemple dutilisation de packages: // Le package java.lang.* est importe implicitement import java.awt.* ; import java.util.* ; Exemple de cration dun nouveau package: package monpackage; import java.awt.* ; public class MaClasse {

    void test ( ) {

    System.out.println ("test"); }

    }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 59 -

    Droits daccs Toutes les mthodes et donnes membres dfinies au sein

    dune classe sont utilisables par toutes les mthodes de la classe.

    Lors de la conception dune classe, il faut dcider des mthodes/variables qui seront visibles lextrieur de cette classe.

    Java implmente la protection des 4 P (public, package, protected, private).

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 60 -

    La protection des 4 P private: visible uniquement au sein de la classe.

    public: visible partout

    Le droit par dfaut est une visibilit des classes/donnes/membres pour toutes les classes au sein dun mme package. Il ny a hlas pas de mot cl pour prciser explicitement cet accs.

    protected : visible uniquement dans la classe et dans les classes drives de cette classe.

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 61 -

    Variables de classe Une variable de classe est une variable associe une classe et

    non aux instances de cette classe.

    Un seul exemplaire dune variable de classe ne peut exister, indpendamment du nombre dinstances de cette classe cres.

    Une variable static est partage par toutes les instances de la classe.

    Les variables de classe sont prfixes par le mot cl static. On accde une variable de classe en faisant prcder le nom de

    cette variable par le nom de la classe suivi dun point.

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 62 -

    Exemples de variables de classe Exemple1:

    class Alien { static int counter;

    Alien ( ) { counter += 1 ; } }

    Exemple 2: La classe java.lang.Math contient la valeur de PI

    class Math { public static final double PI=3.141592653589793d ; }

    Utilisation: Math.PI

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 63 -

    Mthodes de classe Une mthode de classe est une mthode associe une

    classe et non une instance de cette classe. Les mthodes de classe sont prfixes par le mot cl static.

    Une mthode de classe est appelable sans avoir crer dobjet de cette classe.

    Une mthode de classe est appele en prfixant le nom de la mthode par le nom de la classe suivi dun point.

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 64 -

    Exemples de mthodes de classe

    Exemple 1: La classe java.lang.Math contient beaucoup de mthodes static

    class Math { public static int max( int a, int b ) ; public static double sqrt( double a ); public static double sin( double a ); }

    Utilisation: Math.sqrt (3.678) ; Exemple 2:

    class MathStuff { static int halfInt (int x) { return x/2 ; } }

    Utilisation: MathStuff.halfInt (10) ;

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 65 -

    Conversion de types, gestion des

    exceptions

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 66 -

    Conversions de type Les mthodes de conversion de type sont

    stockes dans des classes :

    class java.lang.String class java.lang.Integer class java.lang.Long class java.lang.Float class java.lang.Double

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 67 -

    Exemples de conversion de type int i = 10 ; String chaine = String.valueOf (i) ;

    String chaine="123" ; int entier = Integer.parseInt (chaine) ;

    class Integer { public static int parseInt(String s) throws NumberFormatException; }

    try { entier = Integer.parseInt (chaine) ;

    } catch (NumberFormatException e) { // Si la variable chaine n'est pas convertible on vient ici }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 68 -

    Les exceptions Le traitement des exceptions permet une application davoir un

    comportement adquat une situation inattendue.

    Beaucoup de mthodes sont susceptibles de dclencher une exception (comme par exemple lexemple prcdent).

    Une exception peut tre leve par une clause try/catch . L'utilisation d'une clause try/catch est obligatoire pour les

    exceptions sous contrles (une exception sous contrle est une sous classe de Exception mais pas de RunTimeException).

    Le concepteur dun programme java a un devoir de captage des exceptions pour ne pas dsemparer les utilisateurs.

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 69 -

    Aperu des classes d'exception

    Throwable

    Error Exception

    RuntimeException

    IllegalArgumentException

    NumberFormatException

    java.io.IOException

    java.io.FileNotFoundException

    NullPointerException

    java.sql.SQLException

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 70 -

    La clause try/catch

    try ; catch ( ex1) instruction; catch ( ex2) instruction; . finally ;

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 71 -

    Exemples de gestion dexceptions

    try a = tab [i]; catch (ArrayIndexOutOfBoundsException ex) a = 0 ;

    String chaine; int valeur; try { valeur = Integer.parseInt (chaine); FileInputStream fichier = new FileInputStream ("c:\\texte.txt " ); } catch (NumberFormatException e1) { System.err.println ("mauvais format"); } catch (FileNotFoundException e2) { System.err.println ("Fichier non trouve " ); }

  • Gestion dexceptions l Depuis la version 1.7:

    on peut grer plusieurs exceptions dans une seule clause catch:

    try { valeur = Integer.parseInt (chaine); FileInputStream fichier = new FileInputStream ("c:\\texte.txt") ; } catch (NumberFormatException | FileNotFoundException e) { System.err.println ( Une erreur est survenue "); } Utiliser une instruction try-with-resources (voir chapitre sur les flux)

    - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 72 -

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 73 -

    Gnration d'exception On indique quune mthode m peut gnrer une exception

    (par exemple IllegalArgumentException) par le mot cl throws (obligatoire pour les exceptions sous contrle)

    void m () throws IllegalArgumentException { }

    On peut dclencher une exception grce au mot cl throw

    Exemple: if (x

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 74 -

    Exemple de gnration d'exception

    class Test { public String getNom (String key) throws NullPointerException { if (key == null) throw new NullPointerException ("cle nulle") ; else return "OK" ; } } public class Exemple { public static void main (String args []) { new Exemple () ; } public Exemple () { Test test = new Test () ; try {

    System.out.println (test.getNom (null)) ; } catch (NullPointerException e) { System.err.println (e.getMessage ()) ; }

    } }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 75 -

    Cration de ses propres exceptions

    public class Pile { private int table [] ; private int hauteur = 0 ; public Pile () { table = new int [3] ; } public Pile (int h) { table = new int [h] ; } public void insertValue (int valeur) throws PileException { if (hauteur == table.length) throw new PileException ("Pile pleine") ; else table [hauteur++] = valeur ; } public int removeValue () throws PileException { if (hauteur == 0) throw new PileException ("Pile vide") ; else return table [--hauteur] ; } }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 76 -

    Classe PileException et utilisation

    public class PileException extends Exception {

    public PileException(String m) {

    super (m) ; } } Utilisation: Pile pile = new Pile () ; try {

    System.out.println (pile.removeValue()) ; } catch (PileException e) { System.out.println (e.getMessage()) ; }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 77 -

    javadoc: le gnrateur de

    documentation

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 78 -

    Gnralits sur javadoc l Outils prsent dans la jdk de Sun.

    l Par dfaut, la documentation gnre est au format HTML.

    l Toute la documentation des API java de SUN a t gnre grce javadoc. l La documentation gnre contient les fichiers suivants:

    Un fichier html par classe ou interface contenant le dtail de chaque classe ou interface. Un fichier html par package Un fichier overview-summary.html Un fichier deprecated.html Un fichier serialized-form.html Un fichier overview-frame.html Un fichier all-classes.html Un fichier package-summary.html pour chaque package. Un fichier package-frame.html pour chaque package. Un fichier package-tree.html pour chaque package.

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 79 -

    Exemple de gnration

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 80 -

    Syntaxe des commentaires javadoc

    l Commentaire javadoc: /** * Voil un exemple de commentaire * javadoc */

    l javadoc utilise des "tags" pour prciser le rle de certains

    composants d'un lment: - "tag" standard: @tag - "tag" remplac par une valeur: {@tag} - Liste complte des tags et l'utilisation de javadoc l'adresse

    http://java.sun.com/j2se/javadoc/

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 81 -

    Quelques "tags" de javadoc @author Spcifie l'auteur de l'lment classe et interface 1.0

    @deprecated

    Spcifie que l'lment est dprci package, classe, interface, champ

    1.1

    {@docRoot} Reprsente le chemin relatif du rpertoire de gnration de la documentation

    1.3

    @exception Spcifie une exception qui peut tre leve par l'lment

    mthode 1.0

    {@link} Spcifie un lien vers un lment de la documentation dans n'importe quel texte

    package, classe, interface, mthode, champ

    1.2

    @param Spcifie une paramtre de l'lment constructeur, mthode 1.0

    @see Spcifie un lment en relation avec l'lment document

    package, classe, interface, champ

    1.0

    @since Spcifie depuis quelle version l'lment a t ajout package, classe, interface, mthode, champ

    1.1

    @throws identique @exception mthode 1.2

    @version Spcifie le numro de version de l'lment classe et interface 1.0

    @return Spcifie la valeur de retour d'un lment mthode 1.0

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 82 -

    Exemple d'utilisation de "tags" /** * Commentaire sur le role de la methode * @param val la valeur a traiter * @since 1.0 * @return Rien * @deprecated Utiliser la nouvelle methode XXX */ public void maMethode(int val) { }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 83 -

    Le format d'archive

    JAR

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 84 -

    Le format d'archive jar Les fichiers archives rassemblent et compressent

    plusieurs classes java dans un seul fichier.

    Les f ichiers archives peuvent tre s igns numriquement.

    Un fichier jar peut tre cr avec la commande jar du JDK; la syntaxe est inspire de la commande tar d'unix.

    Exemples:

    jar cvf applet.jar *.class jar tvf applet.jar jar xvf applet.jar

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 85 -

    Utilisation d'un fichier jar Utilisation d'un fichier jar pour une applet:

    Utilisation d'un fichier jar pour une application: Il faut spcifier le nom de la classe principale dans un fichier

    META-INF/MANIFEST.MF

    Manifest-Version: 1.0 Main-Class: bibliotheque.Main

    Archiver le fichier manifest.mf et toutes les ressources et classes de l'application: jar cvfm bibli.jar META-INF/MANIFEST.MF bibliotheque/*.class

    Lancement de l'application: java -jar bibli.jar

    ligne blanche obligatoire

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 86 -

    Gestion de fichiers, flux d'entres/

    sortie, srialisation

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 87 -

    Gestion de fichiers

    La gestion de fichiers se fait par lintermdiaire de la classe java.io.File.

    Cette classe possde des mthodes qui permettent dinterroger ou dagir sur le systme de fichiers du systme dexploitation.

    Un objet de la classe java.io.File peut

    reprsenter un fichier ou un rpertoire.

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 88 -

    Quelques mthodes de la classe java.io.File

    File (String name) File (String path, String name) File (File dir, String name) boolean isFile () boolean isDirectory () boolean mkdir () boolean exists () boolean delete () boolean canWrite () boolean canRead () File getParentFile () long lastModified () String [] list ()

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 89 -

    Exemple dutilisation de la classe java.io.File

    import java.io.* ; public class ExempleFile { static public void main (String args []) { new ExempleFile () ; } ExempleFile () { liste (new File ("c:\\")) ; } private void liste (File dir) { if (dir.isDirectory () == true) { String fichiers [] = dir.list () ; for (int i = 0 ; i != fichiers.length ; i++) System.out.println (fichiers [i]) ; } else { System.err.println (dir + " n'est pas un repertoire") ; } } }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 90 -

    Les flux

    Difficult dun langage davoir un bon systme dentres/sorties. Beaucoup de sources dE/S de natures diffrentes (console, fichier,

    socket,).

    Beaucoup daccs diffrents (accs squentiel, accs alatoire, mise en mmoire tampon, binaire, caractre, par ligne, par mot, etc.).

    Un flux (stream) est un chemin de communication entre la source d'une information et sa destination

    Un processus consommateur n'a pas besoin de connatre la source de son information; un processus producteur n'a pas besoin de connatre la destination

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 91 -

    Les flux proposs par java

    Flux d'entre/sortie de bytes. Flux d'entre/sortie de caractres depuis la

    version 1.1 de java.

    Toutes les classes d'entre/sortie sont dans le package java.io

    Toutes les mthodes peuvent gnrer une java.io.IOException

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 92 -

    Classes de base abstraites des flux

    Flux doctets

    Flux de caractres

    Flux

    dentre

    java.io.InputStream

    java.io.Reader

    Flux de

    sortie

    java.io.OutputStream

    java.io.Writer

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 93 -

    Classes de flux de bytes

    InputStream FileInputStream PipedInputStream ByteArrayInputStream SequenceInputStream StringBufferInputStream ObjectInputStream FilterInputStream

    DataInputStream BufferedInputStream PushBackInputStream

    OutputStream FileOutputStream PipedOutputStream ByteArrayOutputStream ObjectOutputStream FilterOutputStream

    DataOutputStream BufferedOutputStream PrintStream

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 94 -

    La classe java.io.InputStream l Les mthodes de lecture :

    public int read () ; public int read (byte b [ ]) ; public int read (byte b [ ], int off, int len) ;

    l Exemple : InputStream s = .. ; byte buffer [ ] = new byte [1024] ;

    try { s.read (buffer) ; } catch (IOException e) { }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 95 -

    La classe java.io.InputStream l Sauter des octets : public long skip (long n) ;

    l Combien d'octets dans le flux : public int available () ;

    l Le flux supporte-t'il le marquage ? public boolean markSupported () ;

    l Marquage d'un flux : public void mark (int readlimit) ;

    l Revenir sur la marque: public void reset () ;

    l Fermer un flux : public void close () ;

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 96 -

    Exemple de flux dentre import java.io.* ; public class LitFichier { public static void main (String args []) { try { InputStream s = new FileInputStream ("c:\\temp\\data.txt") ; byte buffer [ ] = new byte [s.available()] ; s.read (buffer) ; for (int i = 0 ; i != buffer.length ; i++) System.out.print ( (char) buffer [i]) ;

    s.close () ; } catch (IOException e)

    { System.err.println ("Erreur lecture") ; }

    } }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 97 -

    La classe java.io.OutputStream l Les mthodes d'criture :

    public void write (int b) ; public void write (byte b [ ]) ; public void write (byte b [ ], int off, int len) ;

    l Nettoyage dun flux, forant l'criture des

    donnes buffrises : public void flush () ;

    l Fermeture dun flux

    public void close () ;

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 98 -

    Exemple de flux de sortie import java.io.* ; public class EcritFichier { static public void main (String args []) { String Chaine = "Bonjour" ; try {

    FileOutputStream f = new FileOutputStream ("c:\\temp\\data.txt") ; f.write (Chaine.getBytes ()) ; f.close () ; } catch (IOException e) { System.err.println ("Erreur ecriture") ; }

    } }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 99 -

    Les classes FilterInputStream/ FilterOutputStream

    l Ces deux classes servent de classes de base des classes de gestion dentres/sorties plus volues:

    BufferedInputStream et BufferedOutputStream permettent de lire et crire des donnes travers un tampon de lecture/criture pour amliorer les performances.

    DataInputStream et DataOutputStream permettent de lire/crire des donnes formates (byte, int, char, float, double, etc.)

    etc.

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 100 -

    Exemples de lecture/criture volue

    InputStream s = new FileInputStream ("fichier") ; DataInputStream data = new DataInputStream (s) ; double valeur = data.readDouble () ;

    PrintStream s = new PrintStream (new FileOutputStream ("resultat")) ; s.println ("On ecrit dans le fichier resultat") ;

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 101 -

    Les classes de flux de caractres

    Reader BufferedReader

    LineNumberReader CharArrayReader InputStreamReader

    FileReader FilterReader

    PushBackReader PipedReader StringReader

    Writer BufferedWriter CharArrayWriter OutputStreamWriter

    FileWriter FilterWriter PipedWriter StringWriter PrintWriter

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 102 -

    Exemple de BufferedReader import java.io.*; public class TestBufferedReader { public static void main(String args[]) { try { String ligne ; BufferedReader fichier = new BufferedReader (new FileReader("data.txt")); while ((ligne = fichier.readLine()) != null) System.out.println(ligne); fichier.close(); } catch (IOException e) { System.err.println ("Erreur lecture") ; } } }

  • Java 7: try-with-ressources l Les ressources( fichiers, flux, connexion, ) doivent tre fermes explicitement par le

    dveloppeur. l La clause finally peut tre utilise cet effet mais:

    La ressource doit tre dclare en dehors du bloc try pour tre utilisable dans la clause finally

    Une mthode close () peut elle-mme gnrer une exception entrainant une complexit dans le code

    l Java 7 propose le mcanisme ARM (Automatic Resource Management) applicable sur les objets qui implmentent linterface AutoCloseable (une ressource non utilise sera automatiquement ferme).

    try (BufferedReader bufferedReader = new BufferedReader(new FileReader("C:/Temp/fichier.txt"))) { String ligne=null; while ((ligne = bufferedReader.readLine()) != null) { System.out.println(ligne);}

    } catch (IOException e) {e.printStackTrace(); }

    - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 103 -

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 104 -

    La srialisation l La srialisation est un mcanisme permettant de rendre un

    objet persistant. Il peut tre ensuite:

    Stock dans un fichier Transmis sur le rseau (exemple: RMI)

    l Le processus inverse est la dsrialisation. l Un objet srialis est dit persistant.

    l Cette fonctionnalit est apparue dans la version 1.1 de Java.

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 105 -

    Pourquoi srialiser ? l Rendre un objet persistant ncessite une convention de format pour la

    lecture/criture (cela peut tre une opration complexe et difficile maintenir) ou transmettre un objet via le rseau une application distante.

    l La srialisation permet de rendre un objet persistant de manire simple et naturelle.

    l Si un objet contient dautres objets srialisables, ceux-ci seront automatiquement srialiss.

    l La plupart des classes de base (mais pas toutes) du langage Java sont srialisables.

    l Si la classe a t modifie entre la srialisation et la dsrialisation, lexception java.io.InvalidClassException est dclenche.

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 106 -

    Comment srialiser Une classe est srialisable si elle implmente linterface java.io.Serializable. Des objets de type java.io.ReadObjectStream et java.io.WriteObjectStream vont

    permettre de srialiser/dsrialiser.

    Les donnes membres que lon ne souhaite pas sauvegarder doivent tre dclares transient.

    Des mthodes de lecture/criture peuvent tre redfinies le cas chant: private void writeObject (java.io.ObjectOutputStream out) throws IOException ;

    private void readObject (java.io.ObjectInputStream in) throws IOException,ClassNotFoundException ;

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 107 -

    Exemple Srialisation/Dsrialisation

    import java.io.* ; class Info implements Serializable { private String Nom = "" ; private String MotPasse = "" ; public Info(String n, String m) { Nom=n ; MotPasse = m ; } public String getNom () { return

    Nom ; } public String getPassword ()

    { return MotPasse ; } }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 108 -

    Exemple Srialisation/Dsrialisation

    public class ExempleSerialisation { static public void main (String args []) { new ExempleSerialisation () ; } public ExempleSerialisation () { Info User = new Info ("Pierre","password") ; Ecrire (User) ; User = Lire () ; if (User != null) System.out.println ("nom = " + User.getNom () + " mot de passe = " + User.getPassword ()) ; }

    void Ecrire (Info user) { try { FileOutputStream file = new FileOutputStream ("c:\\travail\\info.txt") ; ObjectOutputStream out = new ObjectOutputStream (file) ; out.writeObject (user) ; out.flush () ; out.close () ; file.close () ; } catch (IOException ex) { System.err.println ("Erreur d'ecriture " + ex) ; } } // Fin classe ExempleSerialisation transparent // suivant

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 109 -

    Exemple Srialisation/Dsrialisation

    Info Lire () { Info User = null ; try { FileInputStream file = new FileInputStream ("c:\\travail\\info.txt") ; ObjectInputStream in = new ObjectInputStream (file) ; User = (Info) in.readObject() ; } catch (Exception ex) { System.err.println ("Erreur de lecture " + ex) ; } return User }

    } // Fin classe ExempleSerialisation

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 110 -

    Le package java.nio l Nouveau package de gestion des entres/sorties introduit par

    la version 1.4.

    l NIO permet d'utiliser des entres/sorties plus rapides en grant des blocs plutt que des bytes ou caractres.

    l Les objets de base pour ce type d'entre sortie sont: Buffer et Channel.

    l Un "Buffer" contient les donnes lire ou crire, un "Channel" dsigne la source ou la destination de l'information.

    l Une entre/sortie sur un objet "Channel" transite obligatoirement par un objet "Buffer".

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 111 -

    L'objet "Buffer" l Un "Buffer" est un objet contenant les

    informations crire ou recevant les informations lues.

    l Le mme objet "Buffer" peut tre utilis en entre et en sortie.

    l Outre le stockage, un objet "Buffer" fournit des informations sur l'opration d'entre sortie.

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 112 -

    Les variables d'tat d'un "Buffer"

    l position indique la 1re position libre dans la zone de

    stockage.

    l limit quantit d'information restant envoyer (criture) ou

    espace restant disponible (lecture)

    l capacity taille maximale d'information pouvant tre stocke

    dans un objet buffer

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 113 -

    Quelques mthodes de "Buffer" l flip ()

    positionne "limit" "position" et remet "position" 0.

    l clear () positionne "limit" capacity, remet "position" a 0 et efface la marque.

    l mark () Utilise "position" comme la marque courante

    l reset () Place "position" la marque courante

    l rewind () Place 0 dans "position" et efface la marque

    l Les diffrentes forme des mthodes get() et put () permettent d'obtenir ou d'initialiser la zone de stockage d'un objet "Buffer".

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 114 -

    Fonctionnement d'un "ByteArrayBuffer"

    put ()

    flip ()

    clear ()

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 115 -

    Quelques mthodes de manipulation d'un objet "Buffer"

    l Allocation d'un buffer: ByteBuffer buffer = ByteBuffer.allocate (512) ; ou byte array [] = new byte [512] ; ByteBuffer buffer = ByteBuffer.wrap (array) ;

    l Decoupage d'un buffer ByteBuffer buffer = ByteBuffer.allocate (10) ; buffer.position (3) ; buffer.limit (7) ByteBuffer slice = buffer.slice () ;

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 116 -

    Exemple java.nio import java.io.*; import java.nio.*; import java.nio.channels.*; public class Test1Nio { Test1Nio() {

    try { FileInputStream fin = new FileInputStream("d:\\travail\\image.jpg"); FileOutputStream fout = new FileOutputStream("d:\\travail\\image2.jpg"); ByteBuffer buffer = ByteBuffer.allocate(512); FileChannel fcin = fin.getChannel(); FileChannel fcout = fout.getChannel(); while (fcin.read(buffer) != -1) { buffer.flip() ; fcout.write(buffer); buffer.clear () ; } fin.close () ; fout.close () ; } catch (Exception e) { System.err.println(e); }

    } public static void main(String[] args) { new Test1Nio(); } }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 117 -

    Diffrents types de buffer

    l ByteBuffer l CharBuffer l IntBuffer l LongBuffer l FloatBuffer l DoubleBuffer

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 118 -

    Quelques "Channel"

    l FileChannel l ServerSocketChannel l SocketChannel l DatagramChannel l SelectableChannel

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 119 -

    Les threads

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 120 -

    Les threads l Un thread est une unit dexcution au sein dun mme processus (ce nest pas un autre

    processus).

    l Tous les threads dun mme processus partagent la mme zone mmoire.

    l La programmation multithreads donne lillusion de la simultanit.

    l La gestion des threads est dpendante de la JVM (problme pour la portabilit). Les threads peuvent tre premptifs ou coopratifs.

    l Un thread possde un nom et une priorit.

    l Un thread sexcute jusquau moment o:

    Un thread de plus grande priorit devient excutable. Une mthode wait (), yield () ou sleep () est lance. Son quota de temps a expir dans un systme premptif.

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 121 -

    Cration dun thread l Une classe est un thread si elle remplit une des deux

    conditions:

    Elle tend la classe java.lang.Thread Elle implmente linterface java.lang.Runnable

    l Le corps du thread est contenu dans une mthode: public void run ()

    l Un thread est lanc par appel dune mthode start ()

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 122 -

    Premier exemple de cration dun thread

    - Etendre la classe Thread class MyThread extends Thread { // Constructeur,donnes membres, mthodes ventuels public void run () {

    // corps du thread } } MyThread thread = new MyThread () ; // Cration du thread thread.start () ; // Appel de la mthode run () - Classe anonyme

    Thread thread = new Thread(){ public void run(){ // corps du thread } } thread.start(); // Appel de la mthode run ()

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 123 -

    Deuxime exemple de cration dun thread

    - Implmentation de linterface class MyClass extends classe implements Runnable { // Constructeur,donnes membres, mthodes ventuels

    public void run () { // corps du thread }

    } Thread thread = new Thread (new MyClass()) ; // Rcupration du thread thread.start () ; // Appel de la mthode run ()

    -- Classe anonyme Runnable myRunnable = new Runnable(){ public void run(){ // corps du thread } } Thread thread = new Thread(myRunnable); thread.start(); // Appel de la mthode run ()

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 124 -

    Quelques mthodes de la classe java.lang.Thread

    start ()

    Rend un thread excutable en lanant la mthode run ().

    sleep (i)

    Endort le thread pour i millisecondes.

    wait ()*

    Suspend le thread.

    notify ()*

    Place le thread dans un tat excutable.

    notifyAll ()* Rveille tous les threads en attente. yield ()

    Place le thread de ltat en cours dexcution ltat excutable .

    setPriority (i)

    Modifie la priorit dun thread (i est compris entre MIN_PRIORITY et MAX_PRIORITY).

    join () join (long)

    Pour qu'un deuxime thread attende la fin d'excution d'un premier thread, il suffit d'appeler la mthode join sur le premier thread. Un paramtre de temps (en millisecondes) peut tre spcifi.

    * Mthodes hrites de la classe java.lang.Object

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 125 -

    Cycle de vie dun thread

    Nouveau thread

    Mort du thread

    fin du run

    Excutable Excutable Thread courant

    Non excutable

    start fin du run

    wait ou sleep notify, notifyAll

    ou fin de sleep

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 126 -

    Arrt dun thread l La mthode stop () est dprcie. l Un thread sarrte lorsquil ny a plus dinstruction excuter dans la

    mthode run (). l Une solution possible:

    public class ThreadTest extends Thread { private boolean bKillThread = false;

    public void run() { while (bKillThread == false) System.out.println( getName() ) ; } public void stopThread() { bKillThread = true; } }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 127 -

    Synchronisation Plusieurs threads accdant une mme donne

    doivent tre synchroniss

    La synchronisation peut se faire sur un objet (pas de synchronisation possible pour une variable d'un type de base).

    Mot cl: synchronized Si un thread invoque une mthode "synchronized"

    d'un objet, celui-ci est verrouill pour toutes ses mthodes "synchronized".

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 128 -

    Premier exemple de synchronisation

    class Compteur {

    private int valeur ; // Si plusieurs threads dispose dune rfrence sur un

    // objet de classe Compteur , un seul thread la fois // pourra pntrer dans la mthode incrmente de cet objet. synchronized void incremente () { valeur += 1 ; }

    int Combien () { return valeur ; }

    }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 129 -

    Deuxime exemple de synchronisation

    class Point {

    private float x,y ; float x () { return x ; } // ne ncessite pas de synchronized

    float y () { return y ; ] // idem void print () { float safeX,safeY ; synchronized (this) { safeX = x ; safeY = y ; } System.out.print ("voil x et y : " + safeX + safeY) ; }

    }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 130 -

    Synchronisation sur une variable de classe

    l Dans les exemples prcdents, synchronized ne protgeait que l'instance d'une classe.

    l Une variable de classe peut appartenir plusieurs instances.

    l Il faut dans ce cas protger une classe et pas seulement une instance de classe.

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 131 -

    Exemple de synchronisation sur une variable de classe

    class Compteur {

    private static int valeur ; void incremente () { synchronized (getClass ()) { valeur += 1 ; } } int Combien () { return valeur ; }

    } l public final Class getClass(): renvoie la classe de lobjet. l Tous les objets de classe Compteur seront bloqus dans la

    mthode incremente().

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 132 -

    Les collections

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 133 -

    Les collections

    l Les collections sont des objets permettant de grer des ensembles d'objets avec ventuellement la possibilit de grer les doublons, les ordres de tri, etc.

    l La version 1 de Java proposait: java.util.Vector, java.util.Stack, java.util.Hashtable Une interface java.util.iterator permettant de parcourir

    ces objets

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 134 -

    Exemple de la collection "stack" package teststack; import java.util.* public class ExempleStack {

    private Stack pile ; public ExempleStack () { pile = new Stack () ; pile.push("Je suis ") ; pile.push("Un exemple ") ; pile.push("de pile") ; Iterator iter = pile.iterator () ; while (iter.hasNext()) { System.out.println (iter.next()) ; } } public static void main(String[] args) { new ExempleStack () ; }

    }

    Je suis Un exemple de pile

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 135 -

    Interfaces de collections

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 136 -

    Collection partir de java 2 l Collection : interface qui est implmente par la plupart des objets qui grent des

    collections.

    l Map : interface qui dfinit des mthodes pour des objets qui grent des collections sous la forme cl/valeur

    l Set : interface pour des objets qui n'autorisent pas la gestion des doublons dans l'ensemble

    l List : interface pour des objets qui autorisent la gestion des doublons et un accs direct un lment

    l SortedSet : interface qui tend l'interface Set et permet d'ordonner l'ensemble

    l SortedMap : interface qui tend l'interface Map et permet d'ordonner l'ensemble

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 137 -

    Implmentation des interfaces

    Interface Implmentation

    Set HashSet

    SortedSet TreeSet

    List ArrayList, LinkedList, Vector

    Map HashMap, Hashtable

    SortedMap TreeMap

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 138 -

    Exemple "TreeMap" package exempletreemap; import java.util.* ; public class ExempleTreeMap {

    public ExempleTreeMap () { TreeMap tree = new TreeMap () ; tree.put ("zzzz",new Integer (26)); tree.put ("aaaa", new Integer (1)) ; tree.put ("bbbb", new Integer (2)) ; Iterator itercle = tree.keySet().iterator() ; Iterator itervaleurs = tree.values().iterator() ;

    ; while (itercle.hasNext()) { System.out.println (itercle.next() + " --> " + itervaleurs.next()) ; } } public static void main(String[] args) { new ExempleTreeMap () ; }

    }

    aaaa --> 1 bbbb --> 2 zzzz --> 26

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 139 -

    Collections et threads l Si plusieurs threads peuvent accder un objet collection, il y a ncessit de synchroniser

    avec une des mthodes statiques de la classe java.util.Collections:

    staticCollection synchronizedCollection (Collectionc) staticList synchronizedList (Listlist) staticMap synchronizedMap (Mapm) staticSet synchronizedSet (Sets) staticSortedMap synchronizedSortedMap (SortedMapm) staticSortedSet synchronizedSortedSet (SortedSets)

    l Les mthodes prcdentes ne synchronisent pas les itrateurs. Il faut donc le faire manuellement:

    synchronized (objet) {

    Iterator iter = objet.iterator () ; {

    // travailler avec l'iterateur }

    }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 140 -

    Collections et threads l Modifications de l'exemple prcdent:

    SortedMap tree = Collections.synchronizedSortedMap(new TreeMap ()) ;

    ..

    synchronized (tree) { Iterator itercle = tree.keySet().iterator() ; Iterator itervaleurs = tree.values().iterator() ; while (itercle.hasNext()) { System.out.println (itercle.next() + " --> " + itervaleurs.next()) ; } }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 141 -

    Une table particulire: java.util.Properties

    l La classe java.util.Properties est une table de hachage pour dfinir des variables d'environnement sous la forme (nom_variable, valeur)

    l Exemple:

    Properties props = new Properties () ; props.put ("monApp.xSize","50") ;

    l La mthode statique System.getProperties () retourne les variables d'environnement dfinies telles que:

    java.vendor java.home file.separator path.separator user.name user.home user.dir

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 142 -

    Collection et java 1.5 l Jusqu' la version 1.4, on stockait et rcuprait des

    "Object" d'une collection. l Exemple:

    ArrayList liste = new ArrayList () ; liste.add (new MaClasse ()) ; MaClasse obj = (MaClasse) liste.get (0) ;

    l Depuis la version 1.5, on spcifie la nature des objets stocks.

    l Exemple: ArrayList liste = new ArrayList () ; liste.add (new MaClasse ()) ; MaClasse obj = liste.get (0) ;

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 143 -

    Les nouveauts de

    la version 5

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 144 -

    Nouveauts de la version 5 l La version 5 (nom de code Tiger) est une volution

    majeure du langage Java.

    l Les volutions prcdentes (hormis la 1.1) n'apportaient en gnral que des nouvelles classes internes.

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 145 -

    Autoboxing/Unboxing l L'autoboxing permet de transformer

    automatiquement une variable de type scalaire en un objet du type correspondant (exemple: int Integer).

    l L'Unboxing est l'opration inverse (exemple: Integer int).

    l Ces proprits sont dfinies dans la JSR 201.

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 146 -

    Exemple AutoBoxing/UnBoxing import java.util.* ; public class AutoBoxing { public static void main (String args [])

    { new AutoBoxing () ; }

    public AutoBoxing () { Vector liste = new Vector () ; for (int i = 1 ; i

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 147 -

    L'importation statique l L'importation statique allge l'criture pour l'accs aux donnes et aux

    mthodes statiques d'une classe. Elle est dfinie par la JSR 201 import static java.lang.Math.* ; // Nouveaut: mot cl static public class TestStaticImport { public static void main (String args []) {

    new TestStaticImport () ; } public TestStaticImport () {

    System.out.println (PI) ; // Remplace Math.Pi grce l'importation statique } }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 148 -

    Boucles volues

    l La syntaxe des boucles a t simplifie pour le parcours des lments d'un tableau ou d'une collection.

    l Exemple: int tableau [] = {10,11,12,13,14,15} ; for (int i : tableau) System.out.println (i) ;

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 149 -

    Les arguments variables

    l Cette fonctionnalit, dfinie par la JSR 201,permet de transmettre un nombre variable d'arguments d'un type donn une fonction.

    l Les arguments seront transmis comme un tableau. On peut transmettre soit un tableau, soit une liste unitaire mais pas les deux en mme temps.

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 150 -

    Exemples de liste variable d'arguments

    public class VarArgs {

    public static void main(String[] args) { new VarArgs () ; }

    public VarArgs () { System.out.println(additionner (1,2,3)) ; System.out.println (additionner (4,5,6,7,8,9)) ; } public int additionner (int ... valeurs) // indique une liste variable d'entiers { int total = 0 ; for (int val : valeurs) total += val ; return total ; }

    }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 151 -

    Le type numr l Dfini par la JSR 201, le type numr permet de dfinir un ensemble

    fini de valeurs.

    l Exemple de type numr: public enum MaCouleur { BLEU , BLANC , ROUGE } ;

    l Le compilateur crera une classe avec les caractristiques suivantes: Un champ static pour chaque lment de la dclaration. Une mthode values() qui renvoie un tableau avec les lments dfinis. Une mthode valueOf(String) qui retourne la valeur correspondante la

    chane. La classe implmente les interfaces Comparable et Serializable Les mthodes toString(), equals(), hashCode() et compareTo() sont

    redfinies.

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 152 -

    Exemple de type numr public class TestEnum {

    private String Objet ; private enum MaCouleur { BLEU , BLANC , ROUGE } ; private MaCouleur Couleur ; public static void main(String[] args) { new TestEnum ("voiture",MaCouleur.ROUGE) ; }

    public TestEnum (String obj, MaCouleur c) { Objet = obj ; Couleur = c ; afficherObjet () ; System.out.println (c) ; // Affichera "ROUGE" } void afficherObjet () { switch (Couleur) { case BLEU : System.out.println (Objet + " de couleur bleue") ; break ; case BLANC: System.out.println (Objet + " de couleur blanche") ; break ; case ROUGE: System.out.println (Objet + " de couleur rouge") ; break ; default: System.out.println (Objet + " de couleur inconnue") ; } }

    }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 153 -

    Affichage format l La classe System.out dispose maintenant d'une mthode printf analogue celle du langage C.

    l Les caractres de formatage sont similaires au langage C l'exception du \n remplac par %n (pour des questions de portabilit).

    l Exemple: public class IOFormatted {

    public static void main(String[] args) { new IOFormatted () ; } public IOFormatted () { String chaine = "Bonjour" ; int i = 1 ; System.out.printf ("la chaine vaut %s%n",chaine) ; System.out.printf ("l'entier vaut %10d%n",i) ; }

    }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 154 -

    Saisie formate l La classe java.util.Scanner permet des entres formates similaires la fonction scanf du langage C.

    l Exemple:

    import java.util.* ; public class IOFormatted {

    public static void main(String[] args) { new IOFormatted () ; } public IOFormatted () { String chaine ; int i = 0 ; Scanner clavier = new Scanner (System.in) ; chaine = clavier.next () ; try { i = clavier.nextInt() ; } catch (InputMismatchException e) { System.err.println("l'entier saisi est incorrect") ; } System.out.printf ("la chaine vaut %s%n",chaine) ; System.out.printf ("l'entier vaut %d%n",i) ; }

    }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 155 -

    Quelques utilisations de java.util.Scanner

    l Exemple 1 :

    String chaine ; Scanner clavier = new Scanner (System.in) ; try { chaine = clavier.next (java.util.regex.Pattern.compile("[Oo]")) ; } catch (InputMismatchException e) { System.err.println ("O ou o attendu") ;

    } l Exemple 2:

    String chaine ; chaine = "1 test 2 test rouge test bleu test " ; Scanner s = (new Scanner (chaine)).useDelimiter ("\\stest\\s") ; System.out.println (s.nextInt ()) ; System.out.println (s.nextInt ()) ; System.out.println (s.next ()) ; System.out.println (s.next ()) ;

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 156 -

    Les types gnriques l Les types gnriques, dfinis par la JSR 14, permettent de spcifier le

    type d'objets que l'on va placer dans une collection d'objets (List, Vector)

    l Avantages:

    meilleure lisibilit: on connat la lecture du programme quel type d'objets seront placs dans la collection.

    La vrification peut tre fait la compilation. Le cast pour rcuprer un objet de la collection est devenu implicite (sans cette

    fonctionnalit, il fallait faire un cast explicite, sachant que celui-ci peut chouer mais cela n'tait dtectable qu' l'excution).

    l La syntaxe pour utiliser les types gnriques utilise les symboles < et >.

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 157 -

    Exemple de type gnrique import java.util.* ; public class TestGenerique {

    public static void main(String[] args) { new TestGenerique () ; } public TestGenerique () { String chaine,str ; boolean bFinBoucle = false ; List liste = new ArrayList () ; Scanner clavier = new Scanner (System.in) ; while (bFinBoucle == false) { chaine = clavier.next () ; if (chaine.equalsIgnoreCase("quit") == false) liste.add (chaine) ; // on ne peut stocker que des Strings else bFinBoucle = true ; } for (Iterator iter = liste.iterator (); iter.hasNext () ;) { str = iter.next () ; // Pas de cast ici System.out.println (str) ; } }

    }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 158 -

    Les classes gnriques public class TestClasseGenerique {

    public static void main(String[] args) { new TestClasseGenerique () ; } public TestClasseGenerique () { new MaClasseGenerique ("Dupont",33) ; }

    } class MaClasseGenerique {

    private T1 param1 ; private T2 param2 ; public MaClasseGenerique (T1 param1,T2 param2) { this.param1 = param1 ; } public T1 getParam1 () { return param1 ; } public T2 getParam2 () { return param2 ; }

    }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 159 -

    Les annotations l Une annotation permet de marquer certains lments du langage.

    l Une annotation pourra ensuite tre utilise la compilation ou l'excution pour automatiser certaines tches.

    l Cration d'une annotation: public @interface MonAnnotation { }

    l Utilisation d'une annotation: @MonAnnotation

    l Une annotation peut tre utilise sur diffrents types d'lments du langage: package, class, interface, enum, annotation, mthodes paramtre, champs d'une classe, variables locales

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 160 -

    Les annotations standards @Deprecated

    Indique au compilateur que l'lment marqu est dprci et ne devrait plus tre utilis.

    @Override

    Indique que l'lment marqu est une surcharge d'une mthode hrite

    @SuppressWarnings

    Indique au compilateur de ne pas afficher certains messages d'avertissement.

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 161 -

    Exemple @Deprecated public class MaClasse {

    private int annee ; public MaClasse () { annee = 2007 ; } public int getYear () { return annee ; } @Deprecated public int getAnnee () { return annee ; }

    } public class Test {

    static public void main (String args []) { System.out.println ( new MaClasse ().getAnnee ()) ; }

    }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 162 -

    Exemple @SuppressWarnings l Liste des avertissements:

    all,deprecation,unchecked,fallthrough,path,serial,finally, deprecation -unchecked,-fallthrough,-path,-serial,-finally

    l Exemples:

    @SuppressWarnings ("deprecation") public class VieilleClasse { } @SuppressWarnings ("deprecation") public int methode () { }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 163 -

    Exemple @Override public class MaClasse {

    private int annee ;

    public MaClasse () { annee = 2007 ; } public int getYear () { return annee ; }

    @Override public String ToString () { return String.valueOf (annee) ; }

    }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 164 -

    Les meta-annotations l Une mta annotation permet d'annoter une

    autre annotation afin d'indiquer au compilateur des informations supplmentaires.

    l Les mta annotations sont dans le package java.lang.annotation: @Documented @Inherited @Retention @Target

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 165 -

    Les mta annotations @Documented

    Indique au gnrateur de documentation que l'annotation doit tre prsente dans la documentation.

    @Inherited

    L'annotation sera hrite par tous les descendants de l'lment marqu (classe uniquement).

    @Retention

    Indique la dure de vie de l'annotation: RetentionPolicy.SOURCE RetentionPolicy.CLASS (dfaut) RetentionPolicy.RUNTIME

    @Target

    Limite le type d'lments sur lesquels l'annotation peut tre utilise.

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 166 -

    Exemple @Documented public @interface Annotation1 { } import java.lang.annotation.Documented ; @Documented public @interface Annotation2 { } public class MaClasse {

    @Annotation1 public int getYear () { return annee ; } @Annotation2 public int getAnnee () { return annee ; }

    }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 167 -

    Exemple @Inherited import java.lang.annotation.Inherited ; @Inherited public @interface Annotation1 { } @Annotation1 public class MaClasse { }

    Toutes les classes tendant MaClasse hriteront de l'annotation

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 168 -

    Exemple @Retention import java.lang.annotation.* ; @Retention(RetentionPolicy.SOURCE) @interface SourceAnnotation {} @Retention(RetentionPolicy.CLASS) @interface ClassAnnotation {} @Retention(RetentionPolicy.RUNTIME) @interface RuntimeAnnotation {} @SourceAnnotation @ClassAnnotation @RuntimeAnnotation public class TestAnnotation {

    public static void main (String args []) { for (Annotation a : TestAnnotation.class.getAnnotations ()) { System.out.println (a.annotationType().getSimpleName ()) ; } }

    }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 169 -

    Exemple @Target l Exemple d'une annotation ne pouvant tre utilise que sur un

    constructeur:

    @Target(ElementType.CONSTRUCTOR) public @interface ConstructeurAnnotation {}

    l Liste des lments pouvant tre annotes: ElementType.ANNOTATION ElementType.CONSTRUCTOR ElementType.FIELD ElementType.LOCAL_VARIABLE ElementType.METHOD ElementType.PACKAGE ElementType.PARAMETER ElementType.TYPE

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 170 -

    Exemple d'annotation personnalise (1/2)

    package testannotation ; import java.lang.annotation.* ; @Documented @Retention(RetentionPolicy.SOURCE) public @interface TODO {

    public static enum Level { LOW, MEDIUM, HIGH } ; String detail () ; Level niveau () default Level.MEDIUM ;

    }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 171 -

    Exemple d'annotation personnalise(2/2)

    package testannotation; import static testannotation.TODO.Level.* ; public class MaClasse {

    private int annee ;

    @TODO (detail="Terminer le constructeur",niveau=HIGH) public MaClasse () { annee = 2007 ; } @TODO (detail="Ameliorer cette fonction") public int getYear () { return annee ; }

    }

  • - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 172 -

    Quelques nouveauts de la

    version 8

  • Nouveauts Java 8 l De nombreuses nouveauts parmi lesquelles:

    Les interfaces, les expressions lambdas, les streams (vus en dtail aux pages suivantes).

    Meilleure gestion de la concurrence (Nouveau verrou StampedLock)

    Rcriture de lAPI date et heure

    Algorithme de tri parallle: Arrays.parallelSort(montableau) plutt que Arrays.sort(montableau)

    Meilleure gestion des processus du systme dexploitation (par ajout des mthodes destroyForcibly, isALive et waitFor la classe Process).

    Meilleure gnration des nombres alatoires (SecureRandom.getInstanceStrong ()).

    Meilleure gestion des rfrences nulles (NullPointer) par utilisation de la classe Optional (exemple en fin de chapitre).

    - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 173 -

  • Les interfaces l Les interfaces proposent dsormais:

    Les mthodes statiques (semblables aux classes) Les mthodes par dfaut (implmentant du code)

    l Exemple:

    public interface MonInterface {

    public void methode () ; public default void affiche () {

    System.out.println ( je suis dans linterface ) ; }

    }

    - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 174 -

  • Interfaces fonctionnelles l Sapplique aux interfaces ne possdant quune seule mthode abstraite.

    l Ce type dinterfaces peut tre annot avec @FunctionalInterface

    l Le package java.util.function propose de nouvelles interfaces fonctionnelles.

    l Exemples:

    - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 175 -

    @FunctionalInterface public interface Runnable {

    void run () ; }

    @FunctionalInterface public interface java.util.function.IntPredicate {

    default IntPredicate and (IntPredicate other) ; default IntPredicate negate () ; default IntPredicate or (IntPredicate other) ; boolean test (int value) ;

    }

  • Quelques nouvelles interfaces l Diffrents types dinterfaces dans java.util.function:

    - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 176 -

    Interface Rle Predicate Une proprit de lobjet pass en

    argument Consumer Action effectuer sur lobjet pass en

    argument Function Manipule un T et retourne un U Supplier Procure une instance de T UnaryOperator Oprateur unaire de T -> T BinaryOperator Oprateur binaire de (T,T) -> T

  • Les expressions lambdas l Possibilit de dfinir des rfrences sur des blocs de code

    anonymes.

    l Simplification de limplmentation des interfaces fonctionnelles.

    l Syntaxe:

    (paramtres) -> expression_simple ou

    (paramtres) -> { bloc dinstructions }

    - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 177 -

  • Exemple expression lambda package testjdk8; public class TestThread {

    public static void main(String[] args) {

    }

    }

    - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 178 -

    Thread thread1 = new Thread(new Runnable() { @Override public void run(){ System.out.println("Thread ancien modele"); } }); thread1.start();

    lRunnable task2 = () -> { System.out.println("Thread nouveau modele"); }; lnew Thread(task2).start();

  • Exemple expression lambda package testjdk8; public class Calc {

    public Calc() { faitCalcul ( (x,y) -> x + y) ; faitCalcul ( (x,y) -> x * y) ; faitCalcul ( (x,y) -> x / y) ; }

    private void faitCalcul (Calculator calculator) { System.out.println(calculator.calcul(10,5)); } public static void main(String[] args) { new Calc () ; }

    }

    - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 179 -

    package testjdk8; @FunctionalInterface public interface Calculator {

    int calcul (int x,int y) ; }

  • Exemple IntPredicate package testjdk8; import java.util.function.IntPredicate; public class TestPredicate {

    public TestPredicate() { IntPredicate i = (x) -> x x == 0 ; System.out.println( i.and (j).test(-1) ); }

    public static void main(String[] args) { new TestPredicate () ; }

    }

    - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 180 -

  • Les streams l Nouveau concept pour traiter efficacement des donnes. l Les streams peuvent tres crs partir de:

    collections (mthode stream() ou parallelStream ()) tableaux: Arrays.stream (tableau)) types primitifs: IntStream, LongStream, DoubleStream Objets: Stream.of (objects, ...)

    l Pour cela: Un stream ne possde ni ne modifie les donnes quil traite

    Un stream traite les donnes de manire optimise du point de vue algorithmique et est capable de calculer en parallle.

    - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 181 -

  • Les streams

    l Il existe 2 types doprations que lon peut effectuer sur un stream:

    Les oprations intermdiaires (comme Stream.map, Stream.filter, ) qui retourne un Stream. Les oprations ne seront effectues qu la rencontre dune opration terminale.

    Les oprations terminales (comme Stream.reduce, Stream.collect, ) qui vont effectuer toutes les oprations intermdiaires et applique les oprations terminales.

    - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 182 -

  • Stream: exemple 1 package testjdk8; import java.util.Arrays; import java.util.List; public class TestStream { public static void main(String[] args) { List locomotions = Arrays.asList("velo","voiture","bus","camion","train","avion","bateau") ; locomotions.stream().filter(x -> x.contains("v")).sorted().forEach(System.out::println); } }

    - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 183 -

    Streams intermdiaires Stream terminal

    avion velo voiture

    Predicat Consumer

  • Stream: exemple 1 bis Stream stream = Stream.of("velo","voiture","bus","camion","train","avion","bateau"); // Affichage en majuscule des chaines commenant par v stream.filter(n -> n.startsWith("v")).map(String::toUpperCase).forEach(System.out::println); lUn stream ne peut tre rutilis; il est ferm ds quune opration terminale a t effectue:

    Stream stream = Stream.of ("velo","voiture","bus","camion","train","avion","bateau").filter(s -> s.startsWith("v"));

    stream.anyMatch(s -> true) ; // OK. Renvoie true si il y a des occurences Stream.noneMatch(s->true) ; // Exception: le stream est ferm

    lPour utiliser plusieurs fois un stream, il faut le recrer pour chaque opration terminale:

    Supplier supplier = () -> Stream.of ("velo","voiture","bus","camion","train","avion","bateau").filter(s -> s.startsWith("v"));

    supplier.get().anyMatch(s -> true) ; // OK supplier.get().noneMatch(s->true) ; // OK

    - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 184 -

  • Stream: exemple 2 package testjdk8; public class Personne {

    private String nom ; private int age ;

    public Personne(String nom, int age) { super(); this.nom = nom; this.age = age; }

    // ajouter accesseurs . @Override public String toString() { return "Personne [nom=" + nom + ", age=" + age + "]"; }

    }

    - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 185 -

  • Stream: exemple 2 ArrayList liste = new ArrayList () ; liste.add (new Personne ("Jean",15)) ;liste.add (new Personne ("Pierre",22)) ; liste.add (new Personne ("Paul",24)) ;

    // Function manipule un objet de type Personne et retourne une String

    Function f = p -> { return p.getNom () + ":" + p.getAge(); }; for (Personne p:liste) System.out.println(f.apply(p));

    // Calcul de la somme des ages

    int somme = liste.stream().mapToInt(p ->p.getAge()).sum () ; // calcul de la moyenne des ages

    OptionalDouble moyenne = liste.stream().mapToInt(p ->p.getAge()).average () ; // calcul de la moyenne des ages pour les personnes > 20 ans

    double moyenne2 = liste.stream().filter (p -> p.getAge() > 20). mapToInt(p ->p.getAge()).average ().getAsDouble() ;

    }

    - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 186 -

  • Exemple Optional package testjava8; import java.util.Arrays; import java.util.List; import java.util.Optional; public class TestOptional {

    private List liste = Arrays.asList("Pierre", "Paul", "Jacques"); public TestOptional () { getString ("Pierre").ifPresent(nom -> System.out.println (nom)); getString ("Pierre").ifPresent(System.out::println); // utilisation oprateur :: } Optional getString (String nom) { if (liste.contains(nom)) return Optional.of (nom.toUpperCase()); return Optional.empty () ; } public static void main(String[] args) { new TestOptional () ; }

    }

    - Ecole Nationale Suprieure d'Ingnieurs de Caen - dp - 187 -

    Consumer

  • Exemple stream parallle List locomotions = Arrays.asList("velo","voiture","bus","camion","train","avion","bateau") ; ForkJoinPool commonPool = ForkJoinPool.commonPool() ; // Cration dun pool de threads System.out.println ("Nombre de threads" + commonPool.getParallelism());