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

J201 (JOC) Java Avancé juin 2007 ~ Brigitte Groléas ~

Présentations similaires


Présentation au sujet: "J201 (JOC) Java Avancé juin 2007 ~ Brigitte Groléas ~"— Transcription de la présentation:

1 J201 (JOC) Java Avancé juin 2007 ~ 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; juin 2007 ~ 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(); juin 2007 ~ 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 juin 2007 ~ 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 juin 2007 ~ 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(); } juin 2007 ~ 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(); } juin 2007 ~ Brigitte Groléas ~

8 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. juin 2007 ~ 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 ... b 15/03/98 qtte : un <i>chiffre</i> parmi d'autre #f1() #f2() un chiffre */ public int compte( int qte ){ // ... return 5; } on obtient les fichiers : AllNames.html Packages.html tree.html juin 2007 ~ Brigitte Groléas ~

10 La documentation de Sun
juin 2007 ~ Brigitte Groléas ~

11 Saisie au clavier String lireligne() throws java.io.IOException {
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 juin 2007 ~ 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 juin 2007 ~ 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 juin 2007 ~ 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)); juin 2007 ~ 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 juin 2007 ~ 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. juin 2007 ~ 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. juin 2007 ~ 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() juin 2007 ~ 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(); juin 2007 ~ 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]); juin 2007 ~ 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. juin 2007 ~ 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 (); juin 2007 ~ 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(); juin 2007 ~ Brigitte Groléas ~


Télécharger ppt "J201 (JOC) Java Avancé juin 2007 ~ Brigitte Groléas ~"

Présentations similaires


Annonces Google