1 / 23

J201 (JOC)

J201 (JOC). Java Avancé. Le typesafe enums. Créer une énumération : enum HorizontalAlign{ LEFT, RIGHT, CENTER }; Accéder : HorizontalAlign.LEFT; HorizontalAlign.RIGHT; HorizontalAlign.CENTER;. Les Collections.

nuri
Download Presentation

J201 (JOC)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. J201 (JOC) Java Avancé ~ Brigitte Groléas ~

  2. Le typesafe enums • Créer une énumération : enum HorizontalAlign{ LEFT, RIGHT, CENTER }; • Accéder : HorizontalAlign.LEFT;HorizontalAlign.RIGHT;HorizontalAlign.CENTER; ~ Brigitte Groléas ~

  3. Les Collections • Pour chaque type de structure de données (liste, ensemble, association) il existe une interface et plusieurs implémentations • Set : élément unique • List : liste, avec doublons • Map : suite de couples clé-valeur List list = new ArrayList(); Set set = new HashSet(); Map map = new TreeMap(); ~ Brigitte Groléas ~

  4. Les implémentations de List • Vector (vieux, déconseillé par sun): doublons possibles, accès indexé, synchronisée (adaptée au multithread) lourd. Bien pour ajout ou suppression en fin de tableau ainsi que pour la recherche à un indice particulier (la représentation en mémoire est un tableau) • ArrayList : tableau, doublons possibles, accès indexé (non synchronosée) plus legere que vector (non adaptée au multi thread). Bien pour ajout ou suppression en fin de tableau ainsi que pour la recherche à un indice particulier (la représentation en mémoire est un tableau) Pour synchroniser une ArrayList : List synchronizedList = Collections.synchronizedCollections(new ArrayList());" • LinkedList : liste chainée, doublons possibles, accès indexé, bien pour ajouter ou supprimer n’importe où dans la liste ~ Brigitte Groléas ~

  5. Les tables d'association java.util.Map : interface qui abstrait la notion de table d'association • HashMap : table gérée par Hcode (+ courante) • HashSet : pas de doublon java.util.SortedMap : interface idem Map mais ordonné induit un accès plus rapide. • TreeMap : arbre balancé • TreeSet : pas de doublon ~ Brigitte Groléas ~

  6. Les Itérateurs List v = new ArrayList(); Individu i = new Individu(); v.add( i); Iterator it = v.iterator(); while( it.hasNext()) { Individu j = (Individu)it.next(); j.affiche(); } ~ Brigitte Groléas ~

  7. Générique List<Individu> v =new ArrayList<Individu> (); Individu i = new Individu(); v.add( i); Iterator <Individu> it = v.iterator(); while( it.hasNext()) { Individu j = it.next(); j.affiche(); } ~ Brigitte Groléas ~

  8. La documentation générer la documentation : javadoc Syntaxe : javadoc fichier.java <RC> Génère fichier.html, qui contient l ’index des classes, attributs et méthodes. ~ Brigitte Groléas ~

  9. Mise en place de documentation public class Perso{ void f1(){ … } void f2(){ … } /** * Par les soirs bleus d'été, * j'irai par les sentiers ... * @version 1.1.1b 15/03/98 * @param qtte : un <i>chiffre</i> parmi d'autre * @see #f1() * @see #f2() * @return un chiffre */ public int compte( int qte ){ // ... return 5; } } • on obtient les fichiers : • AllNames.html • Packages.html • tree.html ~ Brigitte Groléas ~

  10. La documentation de Sun ~ Brigitte Groléas ~

  11. Saisie au clavier Gestion de l'exception Fin de ligne String lireligne() throws java.io.IOException { StringBuffer tab = new StringBuffer( 20 ); char c; while( ( c = (char)System.in.read() ) != '\r' ) tab.append( c ); return tab.toString(); } Saisie d'un caractère au clavier Transformation du StringBuffer en String ~ Brigitte Groléas ~

  12. Les classes imbriquées • Une classe à l'intérieur d'une autre classe. • La classe imbriqué peut accéder aux données privées de la classe supérieure public class AA { private long var; public static class BB { public int i; ... } ... } Acces depuis l'extérieure par package.AA.BB une classe imbriquée static se comporte exactement comme une classe normale, sauf pour la visibilité des variables ~ Brigitte Groléas ~

  13. Classe interne • Classe imbriquée non static • inner classe • Associée à une instance particulière • Ne peut pas exister sans l'intentiation de la classe externe • Les variables de la classe externe sont accessibles à la classe interne ~ Brigitte Groléas ~

  14. Nombre variable d’arguments (varargs) • public int totalise(int ... valeurs) { • int total = 0; • for (int val : valeurs) { • total += val; • } • return total; • } Appel : totalise(1,2,3)); totalise(2,5,6,8,10)); int[] données = {1,2,3,4}; totalise(données)); ~ Brigitte Groléas ~

  15. Les fichiers • 4 classes "mères", abstraites, pour traiter les flots de données héritant directement d'Object : • pour traiter de flots d'octets • la classe InputStream • la classe OutputStream • pour traiter de flots de caractères • la classe Reader • la classe Writer ~ Brigitte Groléas ~

  16. La classe FileReader permet de lire des caractères dans un fichier. • La classe FileWriter permet d'écrire des caractères dans un fichier. ~ Brigitte Groléas ~

  17. La sérialisation • Compresse les informations de l’objet pour qu’il soit ‘transportable’ • Les données dans le fichier ne peuvent pas être lues comme du texte par une autre application • L’objet, lorsqu’il est lu, est décompressé, et retrouve son existence dans un tas (ie une vm) • permet d'échanger des données entre applications distribuées, • permet la persistance des objets : un objet est persistant si sa durée de vie est supérieure au programme qui l'a créé. Une des façons d'obtenir de le persistance est la sérialisation dans des fichiers. ~ Brigitte Groléas ~

  18. Serialisable = transformable en une suite d'octets • ObjectInputSteam en lecture, instancié à partir d'un InputStream, sa méthode readObject() peut lever une exception ClassNotFoundException. • readObject() renvoie un Object donc il faut faire un cast pour récupérer le bon type • ObjectOutputSteam en écriture, instancié à partir d'un OutputStream sa méthode writeObject() ~ Brigitte Groléas ~

  19. Lire et écrire un texte dans le fichier FileWriter fw= new FileWriter( "c:/titio.txt",true); fw.write( "velo\n"); fw.close(); FileReader fr = new FileReader( "c:/titio.txt"); BufferedReader br = new BufferedReader(fr); // pour ligne ligne à ligne String s = br.readLine() ; fr.close(); FileReader reader = new FileReader("c:/titio.txt"); do { lu = reader.read(); if (lu != -1) { c = (char) lu; System.out.print( c); } } while (lu != -1); // tant que l'on est pas à la fin du fichier reader.close(); ~ Brigitte Groléas ~

  20. La classe File • Tester l'existence d'un fichier File f = new File("c:/titio.txt"); if (f.exists()) System.out.println("existe"); else System.out.println("existe pas"); • Récuperer le nom sans le chemin File file = new File("c:/titio.txt"); System.out.println(file.getName());//affiche titio.txt • Renommer un fichier File nouveauNom=new File("c:/suiv.txt"); file.renameTo(nouveauNom); • Lister les fichiers d'un répertoire File repertoire = new File("c:/"); String[] listeFichiers = repertoire.list(); for (int i=0;i < listeFichiers.length;i++) System.out.println(listeFichiers[i]); ~ Brigitte Groléas ~

  21. Fenêtre de choix class EssaiChoixFichier { public static void main(String[] argv) throws IOException { JFileChooser dialogue = new JFileChooser(); PrintWriter ecrivain; File fichier; if (dialogue.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { fichier = dialogue.getSelectedFile(); ecrivain = new PrintWriter(new FileWriter(fichier.getPath(), true)); ecrivain.println(argv[0]); ecrivain.close(); } System.exit(0); } } Fait apparaître la fenêtre modale de dialogue permettant de sélectionner un fichier. ~ Brigitte Groléas ~

  22. Lire les 20 premiers octets du fichier titi et les afficher à l’écran InputStream fluxFichier = new FileInputStream ("c:/titi.txt"); byte contenuFichier [ ] = new byte [20]; fluxFichier.read (contenuFichier); System.out.println (new String (contenuFichier)); fluxFichier.close (); ~ Brigitte Groléas ~

  23. Lire et écrire un objet dans le fichier • FileOutputStream fichier = new FileOutputStream("c:/essai"); ObjectOutputStream flotEcriture = new ObjectOutputStream(fichier); for (int i=0; i<5; ++i) flotEcriture.writeObject(tab[i]); flotEcriture.close(); • FileInputStream fichier2 = new FileInputStream("c:/essai"); ObjectInputStream flotLecture = new ObjectInputStream(fichier2); Object lu; for (int i=0; i<5; ++i) { lu = flotLecture.readObject(); if (lu instanceof Date) tab2[i]=(Date)lu; else System.out.println("eee"); flotLecture.close(); ~ Brigitte Groléas ~

More Related