SlideShare une entreprise Scribd logo
1  sur  34
Les nouveautés de Java 7 et
les promesses de Java 8
Eric TOGUEM
LES NOUVEAUTÉS DE
JAVA 7




                    2
JSR 334 - Petites améliorations
du langage (le projet "Coin")
   Expression littérale binaire:
    ◦ 0b11111111,
   Formatage des expressions numériques
    ◦ long creditCardNumber =
      1111_2222_3333_444L;
   Switch sur les String
    ◦ switch(action) {
              case "save": save(); break;
              case "update": update(); break;
              case "delete": delete(); break;
              default: unknownAction(action);
        }                                       3
JSR 334 - Petites améliorations
du langage (le projet "Coin")
   Type Inference sur la création d'instance
    Generics (le losange):
    ◦ Map<Reference<Object>,Map<String,List<Object>>>
      map = new HashMap<>(),
   Gestion automatique des ressources
    ◦ Modèle avant Java 7
       Res r = ... // 1. Création de la ressource
       try {
       // 2. Utilisation de la ressource
       ...
       }
       finally {
       // 3. Fermeture de la ressource
       r.close();
       }
                                                        4
JSR 334 - Petites améliorations
    du langage (le projet "Coin")
   Exemple: copie de fichier:
        try {
                InputStream input = new FileInputStream(in.txt);
                try {
                                  OutputStream output = new FileOutputStream(out.txt);
                                  try {
                                                    byte[] buf = new byte[8192];
                                                    int len;
                                                    while ( (len=input.read(buf)) >=0 )
                                                                       output.write(buf, 0, len);
                                  }
                                  finally {
                                                    output.close();
                                  }
                }
                finally {
                                  input.close();
                }
        }
        catch (IOException e) {
                System.err.println("Une erreur est survenue lors de la copie");
                e.printStrackTrace();
        }




                                                                                                    5
JSR 334 - Petites améliorations
    du langage (le projet "Coin")
   Exemple: copie de fichier avec le try with
    resources
       try (InputStream input = new FileInputStream(in.txt);
       OutputStream output = new FileOutputStream(out.txt)) {
                byte[] buf = new byte[8192];
                int len;
                while ( (len=input.read(buf)) >=0 )
                         output.write(buf, 0, len);
       }
       catch (IOException e)
       {
                System.err.println("Une erreur survenue lors de la
       copie");
                e.printStrackTrace();                                6
JSR 334 - Petites améliorations
    du langage (le projet "Coin")
   Multicatch : traiter plus d'une exception à la
    fois
    ◦ Avant Java 7
       try { ... }
       catch(IOException e) { // traitement }
       catch(SQLException e) { // traitement }
    ◦ Maintenant
       try { ... }
       catch(IOException | SQLException e) {
                // traitement
       }                                         7
JSR 334 - Petites améliorations
    du langage (le projet "Coin")
   Amélioration du rethrow
    ◦   Avant Java 7
           public void method() throws Exception {
                        try {
                                     // Remonte uniquement des IOException ou SQLException...
                        } catch (Exception e) {
                                     // traitement
                                     throw e; // throws Exception
                        }
           }
    ◦   Maintenant
           public void method() throws IOException, SQLException {
                        try {
                                     // Remonte uniquement des IOException ou SQLException...
                        } catch (Exception e) {
                                     // traitement
                                     throw e; // IOException, SQLException (ou unchecked exception)
                        }
        }

                                                                                                      8
JSR 203 - NIO.2 : accès complet
    aux systèmes de fichiers
 Nouveau package java.nio.file en
  remplacement de la classe java.io.File
 java.nio.file.Path remplacera java.io.File
     // Avec java.io.File
     File file = new File("file.txt");
     // Avec java.nio.file.Path :
     Path path =
     FileSystems.getDefault().getPath("file.txt");
     Path path = Paths.get("file.txt");
     Path path = Paths.get("/chemin/de/base", "sous-
     répertoire", "encore/plusieurs/répertoires",
     "file.txt");
   Méthodes toPath() et toFile()
                                                   9
JSR 203 - NIO.2 : accès complet
    aux systèmes de fichiers
   Files : méthodes à tout faire
    boolean exists = Files.exists(path);
    boolean isDirectory = Files.isDirectory(path);
    boolean isExecutable = Files.isExecutable(path);
    boolean isHidden = Files.isHidden(path);
    boolean isReadable = Files.isReadable(path);
    boolean isRegularFile = Files.isRegularFile(path);
    boolean isWritable = Files.isWritable(path);
    long size = Files.size(path);
    FileTime time = Files.getLastModifiedTime(path);
    Files.delete(path);

                                                   10
JSR 203 - NIO.2 : accès complet
    aux systèmes de fichiers
   Copie et déplacement de fichiers
    Files.copy(Paths.get("source.txt"),
    Paths.get("dest.txt"));
    Files.copy(Paths.get("source.txt"),
    Paths.get("dest.txt"),
        StandardCopyOption.REPLACE_EXISTING,
        StandardCopyOption.COPY_ATTRIBUTES );
    Files.move(Paths.get("source.txt"),
    Paths.get("dest.txt"));
    Files.move(Paths.get("source.txt"),
    Paths.get("dest.txt"),
        StandardCopyOption.REPLACE_EXISTING,
        StandardCopyOption.COPY_ATTRIBUTES,
        StandardCopyOption.ATOMIC_MOVE );   11
JSR 203 - NIO.2 : accès complet
    aux systèmes de fichiers
 Lecture écriture fichier binaire
  byte[] byteArray =
  Files.readAllBytes(path);
  Files.write(path, byteArray);
 Lecture écriture fichier texte
  List<String> lines =
  Files.readAllLines(path, charset);
  Files.write(path, lines, charset);

                                       12
JSR 203 - NIO.2 : accès complet
    aux systèmes de fichiers
   Ouverture de flux divers
        // Ouverture en lecture :
        try ( InputStream input = Files.newInputStream(path) ) { ... }
        // Ouverture en écriture :
        try ( OutputStream output = Files.newOutputStream(path) ) { ...
    }
        // Ouverture d'un Reader en lecture :
        try ( BufferedReader reader = Files.newBufferedReader(path,
                         StandardCharsets.UTF_8) ) { ... }
        // Ouverture d'un Writer en écriture :
        try ( BufferedWriter writer = Files.newBufferedWriter(path,
                         StandardCharsets.UTF_8) ) { ... }




                                                                   13
JSR 203 - NIO.2 : accès complet
    aux systèmes de fichiers
   DirectoryStream : lister les éléments d'un dossier
    ◦ Liste des fichiers/répertoires du répertoire courant :
          try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)){
                    for (Path path : stream) {
                              System.out.println(path);
                    }
          }
    ◦ Utiliser un filtre
      DirectoryStream.Filter<Path> filter = new DirectoryStream.Filter<Path>() {
          @Override public boolean accept(Path entry) throws IOException {
                       return Files.isRegularFile(entry) && Files.size(entry) > 8192L;
          }
      };
      try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, filter)) {
          for (Path path : stream) {
                       System.out.println(path);
          }
      }
                                                                                         14
JSR 203 - NIO.2 : accès complet
    aux systèmes de fichiers
   DirectoryStream : lister les éléments d'un dossier
    ◦ Utiliser un filtre
        Path dir = Paths.get(); // current directory
        try (
                  DirectoryStream<Path> stream =
                                   Files.newDirectoryStream(dir, "*.txt"))
                  {
                          for (Path path : stream) {
                                   System.out.println(path);
                  }
        }




                                                                       15
JSR 203 - NIO.2 : accès complet
    aux systèmes de fichiers
   FileVisitor : parcours d'une arborescence
         Path dir = Paths.get(); // current directory
         Files.walkFileTree(dir, new SimpleFileVisitor<Path>() {
                @Override public FileVisitResult visitFile(Path file,
      BasicFileAttributes attrs) throws IOException {
                        System.out.println(file);
                        return FileVisitResult.CONTINUE;
                }
         });
    ◦ L'interface FileVisitor dispose de quatre méthodes:
       visitFile() exécutée sur chaque fichier trouvé.
       visitFileFailed() exécutée lorsqu'une erreur empêche l'accès au
        fichier.
       preVisitDirectory() appelée avant le parcours d'un répertoire.
       postVisitDirectory() appelée une fois le répertoire parcouru.
                                                                     16
JSR 203 - NIO.2 : accès complet
    aux systèmes de fichiers
   FileAttributeView : accès aux attributs
    ◦ Accès complet aux attributs via un système de
      vue
        BasicFileAttributeView (basic);
        DosFileAttributeView (dos);
        PosixFileAttributeView (posix);
        FileOwnerAttributeView;
        AclFileAttributeView (acl) ;
    ◦ Vérification du support
         Files.getFileStore(path).supportsFileAttributeView(D
         osFileAttributeView.class);

                                                          17
JSR 203 - NIO.2 : accès complet
    aux systèmes de fichiers
   FileAttributeView : accès aux attributs
    ◦ Accès en lecture/écriture aux attributs 'DOS' :
       DosFileAttributeView dosView = Files.getFileAttributeView(path,
                                                          DosFileAttributeView.class);
       dosView.setArchive(false);

       DosFileAttributes attrs = dosView.readAttributes();
       boolean a = attrs.isArchive();




                                                                                 18
JSR 203 - NIO.2 : accès complet
    aux systèmes de fichiers
   WatchService : détecter les changements dans un répertoire
       // On crée un objet WatchService, chargé de surveiller le dossier :
       try (WatchService watcher = path.getFileSystem().newWatchService()) {
           // On y enregistre un répertoire, en lui associant certains types d'évènements :
            path.register(watcher, StandardWatchEventKinds.ENTRY_CREATE,
           StandardWatchEventKinds.ENTRY_DELETE,
           StandardWatchEventKinds.ENTRY_MODIFY); // (ou plusieurs)
           // Puis on boucle pour récupérer tous les événements :
           while (true) {
                           // On récupère une clef sur un événement (code bloquant)
                           WatchKey watchKey = watcher.take();
                           // On parcourt tous les évènements associés à cette clef :
                           for (WatchEvent<?> event: watchKey.pollEvents()) {
                                            if (event.king()==StandardWatchEventKinds.OVERFLOW)
                                                              continue; // évènement perdu
                                            System.out.println(event.kind() + " - " + event.context());
                           }
                           // On réinitialise la clef (très important pour recevoir les événements suivants)
                           if ( watchKey.reset() ==false ) {
                                            // Le répertoire qu'on surveille n'existe plus ou n'est plus accessible break;
                           }
           }
       }


                                                                                                                             19
AWT/Swing
   TransferHandler.setDragImage() pour définir une image à
    afficher pendant le drag&drop.
   JList<E> et JComboBox<E>.
   Window.setType() + Window.Type contenant trois valeurs
    possibles :
    ◦ NORMAL pour le comportement par défaut,
    ◦ POPUP pour les fenêtres temporaires,
    ◦ UTILITY pour les barres d'outils ou palettes.
   BorderFactory s'enrichit de nouveaux types de bordures:
    ◦   createDashedBorder(),
    ◦   createLineBorder(),
    ◦   createLoweredSoftBevelBorder(),
    ◦   createRaisedSoftBevelBorder(),
    ◦   createSoftBevelBorder(),
    ◦   createStrokeBorder().


                                                              20
AWT/Swing
   TRANSLUCENT - transparence globale
    ◦ setOpacity() pour définir le niveau d'opacité globale de la fenêtre
      final JFrame frame = new JFrame();
      frame.setUndecorated(true);
      frame.add(new JLabel("Hello World !"));
      frame.setOpacity(0.75F);
      frame.getContentPane().setBackground(Color.BLACK);
      frame.setVisible(true);




                                                                     21
AWT/Swing
   PERPIXEL_TRANSLUCENT - transparence pixel par pixel
    ◦ Permet de définir le niveau de transparence de chaque pixel de la
      fenêtre.
    ◦ Utiliser la méthode setBackground()
      final JFrame frame = new JFrame();
      frame.setUndecorated(true);
      frame.add(new JLabel("Hello World !"));
      frame.setBackground(new Color(0F,0F,0F,0.75F));
      frame.setVisible(true);




                                                                  22
AWT/Swing
   PERPIXEL_TRANSPARENT - forme non rectangulaire
    ◦ Possible de créer des fenêtres non rectangulaires.
    ◦ On utilisera pour cela la méthode setShape() avec la forme désirée
      final JFrame frame = new JFrame();
      frame.setUndecorated(true);
      frame.setShape(new
      RoundRectangle2D.Double(0,0,frame.getWidth(),frame.getHeight(),64,6
      4));
      frame.setBackground(Color.BLACK));
      frame.setVisible(true);




                                                                     23
AWT/Swing
   Nimbus, le nouveau LookAndFeel




                                     24
LES PROMESSES DE
JAVA 8




                   25
Une nouvelle API pour la
manipulation des Date et heures
(JSR 310)
   Obtenir l’heure courrante:
    ◦ Avec la classe Clock:
      Clock clock = Clock.systemDefaultZone();
      long time = clock.millis();
   Obtenir la date et l’heure
     LocalDate date = LocalDate.now();
     System.out.printf("%s-%s-%s",
     date.getYear(),    date.getMonthValue(),
     date.getDayOfMonth() );
                                                26
Une nouvelle API pour la
manipulation des Date et heures
(JSR 310)
   Effectuer les calculs sur les dates et
    heures
     Period p = Period.of(5, HOURS);
     LocalTime time = LocalTime.now();
     LocalTime newTime;
     newTime = time.plus(5, HOURS);
     newTime = time.plusHours(5);
     newTime = time.plus(p);

                                             27
Les expressions Lambda
 Nouvelle syntaxe permettant d’écrire
  un « morceau de code ».
 Se décompose en deux partie séparés
  par une flèche simple ( -> ),
    ◦ A gauche on retrouve la liste des
      paramètres entre parenthèses.
    ◦ A droite un bloc de code entre accolades.
      (Type arg1, Type arg2) -> { instruction1;
              instruction2; return value; }

                                                  28
Les expressions Lambda
   Exemple: l’implémentation d’un Comparator :
    ◦ Avant Java 8:
        Comparator<String> ignoreCase = new Comparator<String>()
      {
                 @Override
                 public int compare(String s1, String s2) {
                           return s1.compareToIgnoreCase(s2);
                 }
        };

    ◦ Avec Java 8
        Comparator<String> ignoreCase = (String s1, String s2) -> {
                  return s1.compareToIgnoreCase(s2);
        };
    ◦ Peut être simplifié
         Comparator<String> ignoreCase = (s1, s2) ->
      s1.compareToIgnoreCase(s2);




                                                                      29
Les expressions Lambda
   Les références de méthode
    ◦ Permettent de référencer une méthode
      quelconque
    ◦ Syntaxe composée de deux parties
      séparées par le caractères dièse ( # )
      La partie de gauche: au nom du type Java
       dans lequel on va rechercher la méthode.
      La partie de droite: nom de la méthode,
       éventuellement suivi par le type de ses
       paramètres.
      Exemple:
       Comparator<String> ignoreCase =
       String#compareToIgnoreCase(String);
                                                  30
Les expressions Lambda
   Les méthodes d’extension virtuelles
    ◦ Comblent les lacunes des interfaces Java:
      Une interface publique d’une API ne peut plus
       être modifiée sous peine de provoquer des
       erreurs,
      Cas des interfaces Collection, List ou Map
    ◦ Permettent de faire évoluer lesinterfaces
      en limitant les incompatibilités.
       1. Rajouter des méthodes dans l’interface
       2. Indiquer une méthode static représentant
          l’implémentation par défaut qui sera utilisée
                                                       31
Les expressions Lambda:
exemple
   Trier une List
    ◦ Avant Java 8
      Collections.sort(list, new Comparator<String>() {
         @Override
         public int compare(String a, String b) {
           return a.compareToIgnoreCase(b);
         }
       });

    ◦ À partir de Java 8
     Collections.sort(list, (String a, String b) ->
     a.compareToIgnoreCase(b) );
     list.sort(String#compareToIgnoreCase);


                                                          32
Les expressions Lambda:
exemple
   Gestion des listeners Swing
    ◦ Avant Java 8
      button.addActionListener(new
      ActionListener() {
         @Override
         public void actionPerformed(ActionEvent
      e) {
           uneMethodAExecuterLorsDuClic(e);
         }
       });

    ◦ À partir de Java 8
     button.addActionListener(this#uneMethodAExecuterL
     orsDuClic);
                                                     33
34

Contenu connexe

Tendances

SdE 2 - Langage C, Allocation de memoire
SdE 2 - Langage C, Allocation de memoireSdE 2 - Langage C, Allocation de memoire
SdE 2 - Langage C, Allocation de memoireAlexandru Radovici
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptAbdoulaye Dieng
 
"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012Jean-Michel Doudoux
 
Fondamentaux d’une API REST
Fondamentaux d’une API RESTFondamentaux d’une API REST
Fondamentaux d’une API RESTAbdoulaye Dieng
 
Fmin103 0910 tpjdbc
Fmin103 0910 tpjdbcFmin103 0910 tpjdbc
Fmin103 0910 tpjdbcKarim Amane
 
Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)Abdelouahed Abdou
 
Chapitre 1 introduction generale
Chapitre 1   introduction generaleChapitre 1   introduction generale
Chapitre 1 introduction generaleAmir Souissi
 
Atelier symfony n 2
Atelier symfony n 2Atelier symfony n 2
Atelier symfony n 2Amir Souissi
 
Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJean-Pierre Vincent
 
Pratique de la programmation en go
Pratique de la programmation en goPratique de la programmation en go
Pratique de la programmation en gokader15
 

Tendances (15)

SdE 2 - Langage C, Allocation de memoire
SdE 2 - Langage C, Allocation de memoireSdE 2 - Langage C, Allocation de memoire
SdE 2 - Langage C, Allocation de memoire
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Using UBCluster
Using UBClusterUsing UBCluster
Using UBCluster
 
"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012
 
Fondamentaux d’une API REST
Fondamentaux d’une API RESTFondamentaux d’une API REST
Fondamentaux d’une API REST
 
Tp n 3 linux
Tp n 3 linuxTp n 3 linux
Tp n 3 linux
 
Fmin103 0910 tpjdbc
Fmin103 0910 tpjdbcFmin103 0910 tpjdbc
Fmin103 0910 tpjdbc
 
Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)
 
Chapitre 1 introduction generale
Chapitre 1   introduction generaleChapitre 1   introduction generale
Chapitre 1 introduction generale
 
Atelier symfony n 2
Atelier symfony n 2Atelier symfony n 2
Atelier symfony n 2
 
Tp n 4 linux
Tp n 4 linuxTp n 4 linux
Tp n 4 linux
 
SdE2 4 - Processus
SdE2 4 - ProcessusSdE2 4 - Processus
SdE2 4 - Processus
 
Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOP
 
SdE 3 - Systemes de fichiers
SdE 3 - Systemes de fichiersSdE 3 - Systemes de fichiers
SdE 3 - Systemes de fichiers
 
Pratique de la programmation en go
Pratique de la programmation en goPratique de la programmation en go
Pratique de la programmation en go
 

En vedette

50 nouvelles choses que l'on peut faire avec Java 8
50 nouvelles choses que l'on peut faire avec Java 850 nouvelles choses que l'on peut faire avec Java 8
50 nouvelles choses que l'on peut faire avec Java 8José Paumard
 
JDK 8, lambdas, streams, collectors - Bretagne Tour
JDK 8, lambdas, streams, collectors - Bretagne TourJDK 8, lambdas, streams, collectors - Bretagne Tour
JDK 8, lambdas, streams, collectors - Bretagne TourJosé Paumard
 
Autumn collection JavaOne 2014
Autumn collection JavaOne 2014Autumn collection JavaOne 2014
Autumn collection JavaOne 2014José Paumard
 
50 new things you can do with java 8
50 new things you can do with java 850 new things you can do with java 8
50 new things you can do with java 8José Paumard
 
Java 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelizationJava 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelizationJosé Paumard
 
01 sesion conceptos iniciales
01 sesion conceptos iniciales01 sesion conceptos iniciales
01 sesion conceptos inicialesdivedsuz
 
donatoo.eu au Ignite alsace
donatoo.eu au Ignite alsacedonatoo.eu au Ignite alsace
donatoo.eu au Ignite alsacedonatoo
 
Datas présentation alger 2 juin2013
Datas présentation alger 2 juin2013Datas présentation alger 2 juin2013
Datas présentation alger 2 juin2013Xavier Dordor
 
Diapo de lengua
Diapo de lenguaDiapo de lengua
Diapo de lenguaanedymono
 
Save you capital gain taxes
Save you capital gain taxesSave you capital gain taxes
Save you capital gain taxesAloK Patnia
 
ShareLex & l'économie collaborative - Collège des Bernardins 13 juin 2014
ShareLex & l'économie collaborative - Collège des Bernardins 13 juin 2014ShareLex & l'économie collaborative - Collège des Bernardins 13 juin 2014
ShareLex & l'économie collaborative - Collège des Bernardins 13 juin 2014Anne-Laure Brun-Buisson
 
Atrophie iris colobome
Atrophie iris colobomeAtrophie iris colobome
Atrophie iris colobomeFrank FAMOSE
 
Telecomunicación y multimedia
Telecomunicación y multimediaTelecomunicación y multimedia
Telecomunicación y multimedialucia250243
 

En vedette (20)

50 nouvelles choses que l'on peut faire avec Java 8
50 nouvelles choses que l'on peut faire avec Java 850 nouvelles choses que l'on peut faire avec Java 8
50 nouvelles choses que l'on peut faire avec Java 8
 
JDK 8, lambdas, streams, collectors - Bretagne Tour
JDK 8, lambdas, streams, collectors - Bretagne TourJDK 8, lambdas, streams, collectors - Bretagne Tour
JDK 8, lambdas, streams, collectors - Bretagne Tour
 
Autumn collection JavaOne 2014
Autumn collection JavaOne 2014Autumn collection JavaOne 2014
Autumn collection JavaOne 2014
 
50 new things you can do with java 8
50 new things you can do with java 850 new things you can do with java 8
50 new things you can do with java 8
 
Java 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelizationJava 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelization
 
Power point gbi
Power point gbiPower point gbi
Power point gbi
 
Atelier 13 - Réenchanter les destinations pour conquérir et transformer - ET8
Atelier 13 - Réenchanter les destinations pour conquérir et transformer - ET8Atelier 13 - Réenchanter les destinations pour conquérir et transformer - ET8
Atelier 13 - Réenchanter les destinations pour conquérir et transformer - ET8
 
Reseña bryan
Reseña bryanReseña bryan
Reseña bryan
 
01 sesion conceptos iniciales
01 sesion conceptos iniciales01 sesion conceptos iniciales
01 sesion conceptos iniciales
 
donatoo.eu au Ignite alsace
donatoo.eu au Ignite alsacedonatoo.eu au Ignite alsace
donatoo.eu au Ignite alsace
 
Datas présentation alger 2 juin2013
Datas présentation alger 2 juin2013Datas présentation alger 2 juin2013
Datas présentation alger 2 juin2013
 
Evaluer parcours v2
Evaluer parcours v2Evaluer parcours v2
Evaluer parcours v2
 
Diapo de lengua
Diapo de lenguaDiapo de lengua
Diapo de lengua
 
Save you capital gain taxes
Save you capital gain taxesSave you capital gain taxes
Save you capital gain taxes
 
ShareLex & l'économie collaborative - Collège des Bernardins 13 juin 2014
ShareLex & l'économie collaborative - Collège des Bernardins 13 juin 2014ShareLex & l'économie collaborative - Collège des Bernardins 13 juin 2014
ShareLex & l'économie collaborative - Collège des Bernardins 13 juin 2014
 
Atrophie iris colobome
Atrophie iris colobomeAtrophie iris colobome
Atrophie iris colobome
 
Ppt solemne
Ppt solemnePpt solemne
Ppt solemne
 
Pourquoi moi
Pourquoi moiPourquoi moi
Pourquoi moi
 
Telecomunicación y multimedia
Telecomunicación y multimediaTelecomunicación y multimedia
Telecomunicación y multimedia
 
6-Cm24 14-15
6-Cm24 14-156-Cm24 14-15
6-Cm24 14-15
 

Similaire à Les nouveautés de java 7 et les promesses

Pres_ java_Fichier_Suite_cour sur les fichier en java.pdf
Pres_ java_Fichier_Suite_cour sur les fichier en java.pdfPres_ java_Fichier_Suite_cour sur les fichier en java.pdf
Pres_ java_Fichier_Suite_cour sur les fichier en java.pdfHERGALYOUSSEF
 
Java 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambdaJava 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambdaCh'ti JUG
 
Entrees sorties
Entrees sortiesEntrees sorties
Entrees sortiesyazidds2
 
log file sous Netbeans et J2ME
log file sous Netbeans et J2MElog file sous Netbeans et J2ME
log file sous Netbeans et J2MEZied
 
Gestion d'E_S - Sérialisation.pdf
Gestion d'E_S - Sérialisation.pdfGestion d'E_S - Sérialisation.pdf
Gestion d'E_S - Sérialisation.pdfMadaniAhlem2
 
Affichage d'un document Office sous Android
Affichage d'un document Office sous AndroidAffichage d'un document Office sous Android
Affichage d'un document Office sous AndroidStéphane Liétard
 
Programmation Android - 09 - Web services
Programmation Android - 09 - Web servicesProgrammation Android - 09 - Web services
Programmation Android - 09 - Web servicesYann Caron
 
Le système d&rsquo;E/S en Java
Le système d&rsquo;E/S en JavaLe système d&rsquo;E/S en Java
Le système d&rsquo;E/S en JavaKorteby Farouk
 
Python et la persistance de données — initiation python 1.5
Python et la persistance de données — initiation python 1.5Python et la persistance de données — initiation python 1.5
Python et la persistance de données — initiation python 1.5Abib Faye
 
Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5Mamadou Oury Ba
 
Les entrées sorties
Les entrées sortiesLes entrées sorties
Les entrées sortiesJihed Kaouech
 
Cours_Linux_S1_Partie 2.pptx
Cours_Linux_S1_Partie 2.pptxCours_Linux_S1_Partie 2.pptx
Cours_Linux_S1_Partie 2.pptxKhalil BOUKRI
 
Chapitre 4 persistance des donnees
Chapitre 4  persistance des donneesChapitre 4  persistance des donnees
Chapitre 4 persistance des donneesAmir Souissi
 
#5 Java EE5 Client Lourd et Smart Client
#5 Java EE5  Client Lourd  et Smart Client#5 Java EE5  Client Lourd  et Smart Client
#5 Java EE5 Client Lourd et Smart ClientGuillaume Sauthier
 

Similaire à Les nouveautés de java 7 et les promesses (20)

Pres_ java_Fichier_Suite_cour sur les fichier en java.pdf
Pres_ java_Fichier_Suite_cour sur les fichier en java.pdfPres_ java_Fichier_Suite_cour sur les fichier en java.pdf
Pres_ java_Fichier_Suite_cour sur les fichier en java.pdf
 
Java 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambdaJava 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambda
 
Entrees sorties
Entrees sortiesEntrees sorties
Entrees sorties
 
Python avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiersPython avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiers
 
log file sous Netbeans et J2ME
log file sous Netbeans et J2MElog file sous Netbeans et J2ME
log file sous Netbeans et J2ME
 
Gestion d'E_S - Sérialisation.pdf
Gestion d'E_S - Sérialisation.pdfGestion d'E_S - Sérialisation.pdf
Gestion d'E_S - Sérialisation.pdf
 
Affichage d'un document Office sous Android
Affichage d'un document Office sous AndroidAffichage d'un document Office sous Android
Affichage d'un document Office sous Android
 
JAVA-IO.pdf
JAVA-IO.pdfJAVA-IO.pdf
JAVA-IO.pdf
 
JAVA-IO.pdf
JAVA-IO.pdfJAVA-IO.pdf
JAVA-IO.pdf
 
Programmation Android - 09 - Web services
Programmation Android - 09 - Web servicesProgrammation Android - 09 - Web services
Programmation Android - 09 - Web services
 
Le système d&rsquo;E/S en Java
Le système d&rsquo;E/S en JavaLe système d&rsquo;E/S en Java
Le système d&rsquo;E/S en Java
 
Spark - Ippevent 19-02-2015
Spark - Ippevent 19-02-2015Spark - Ippevent 19-02-2015
Spark - Ippevent 19-02-2015
 
Python et la persistance de données — initiation python 1.5
Python et la persistance de données — initiation python 1.5Python et la persistance de données — initiation python 1.5
Python et la persistance de données — initiation python 1.5
 
Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5
 
Les entrées sorties
Les entrées sortiesLes entrées sorties
Les entrées sorties
 
Cours_Linux_S1_Partie 2.pptx
Cours_Linux_S1_Partie 2.pptxCours_Linux_S1_Partie 2.pptx
Cours_Linux_S1_Partie 2.pptx
 
Chapitre 4 persistance des donnees
Chapitre 4  persistance des donneesChapitre 4  persistance des donnees
Chapitre 4 persistance des donnees
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
Ch1 p1
Ch1 p1Ch1 p1
Ch1 p1
 
#5 Java EE5 Client Lourd et Smart Client
#5 Java EE5  Client Lourd  et Smart Client#5 Java EE5  Client Lourd  et Smart Client
#5 Java EE5 Client Lourd et Smart Client
 

Plus de Eric Toguem

Linked open data pour la consommation des informations
Linked open data pour la consommation des informationsLinked open data pour la consommation des informations
Linked open data pour la consommation des informationsEric Toguem
 
Plateformes de développement d’applications mobiles
Plateformes de développement d’applications mobilesPlateformes de développement d’applications mobiles
Plateformes de développement d’applications mobilesEric Toguem
 
Développement d’applications ussd en java
Développement d’applications ussd en javaDéveloppement d’applications ussd en java
Développement d’applications ussd en javaEric Toguem
 
Introspection reflection
Introspection reflectionIntrospection reflection
Introspection reflectionEric Toguem
 
Les expressions régulières en java
Les expressions régulières en javaLes expressions régulières en java
Les expressions régulières en javaEric Toguem
 

Plus de Eric Toguem (6)

Design patterns
Design patternsDesign patterns
Design patterns
 
Linked open data pour la consommation des informations
Linked open data pour la consommation des informationsLinked open data pour la consommation des informations
Linked open data pour la consommation des informations
 
Plateformes de développement d’applications mobiles
Plateformes de développement d’applications mobilesPlateformes de développement d’applications mobiles
Plateformes de développement d’applications mobiles
 
Développement d’applications ussd en java
Développement d’applications ussd en javaDéveloppement d’applications ussd en java
Développement d’applications ussd en java
 
Introspection reflection
Introspection reflectionIntrospection reflection
Introspection reflection
 
Les expressions régulières en java
Les expressions régulières en javaLes expressions régulières en java
Les expressions régulières en java
 

Les nouveautés de java 7 et les promesses

  • 1. Les nouveautés de Java 7 et les promesses de Java 8 Eric TOGUEM
  • 3. JSR 334 - Petites améliorations du langage (le projet "Coin")  Expression littérale binaire: ◦ 0b11111111,  Formatage des expressions numériques ◦ long creditCardNumber = 1111_2222_3333_444L;  Switch sur les String ◦ switch(action) { case "save": save(); break; case "update": update(); break; case "delete": delete(); break; default: unknownAction(action); } 3
  • 4. JSR 334 - Petites améliorations du langage (le projet "Coin")  Type Inference sur la création d'instance Generics (le losange): ◦ Map<Reference<Object>,Map<String,List<Object>>> map = new HashMap<>(),  Gestion automatique des ressources ◦ Modèle avant Java 7 Res r = ... // 1. Création de la ressource try { // 2. Utilisation de la ressource ... } finally { // 3. Fermeture de la ressource r.close(); } 4
  • 5. JSR 334 - Petites améliorations du langage (le projet "Coin")  Exemple: copie de fichier: try { InputStream input = new FileInputStream(in.txt); try { OutputStream output = new FileOutputStream(out.txt); try { byte[] buf = new byte[8192]; int len; while ( (len=input.read(buf)) >=0 ) output.write(buf, 0, len); } finally { output.close(); } } finally { input.close(); } } catch (IOException e) { System.err.println("Une erreur est survenue lors de la copie"); e.printStrackTrace(); } 5
  • 6. JSR 334 - Petites améliorations du langage (le projet "Coin")  Exemple: copie de fichier avec le try with resources try (InputStream input = new FileInputStream(in.txt); OutputStream output = new FileOutputStream(out.txt)) { byte[] buf = new byte[8192]; int len; while ( (len=input.read(buf)) >=0 ) output.write(buf, 0, len); } catch (IOException e) { System.err.println("Une erreur survenue lors de la copie"); e.printStrackTrace(); 6
  • 7. JSR 334 - Petites améliorations du langage (le projet "Coin")  Multicatch : traiter plus d'une exception à la fois ◦ Avant Java 7 try { ... } catch(IOException e) { // traitement } catch(SQLException e) { // traitement } ◦ Maintenant try { ... } catch(IOException | SQLException e) { // traitement } 7
  • 8. JSR 334 - Petites améliorations du langage (le projet "Coin")  Amélioration du rethrow ◦ Avant Java 7 public void method() throws Exception { try { // Remonte uniquement des IOException ou SQLException... } catch (Exception e) { // traitement throw e; // throws Exception } } ◦ Maintenant public void method() throws IOException, SQLException { try { // Remonte uniquement des IOException ou SQLException... } catch (Exception e) { // traitement throw e; // IOException, SQLException (ou unchecked exception) } } 8
  • 9. JSR 203 - NIO.2 : accès complet aux systèmes de fichiers  Nouveau package java.nio.file en remplacement de la classe java.io.File  java.nio.file.Path remplacera java.io.File // Avec java.io.File File file = new File("file.txt"); // Avec java.nio.file.Path : Path path = FileSystems.getDefault().getPath("file.txt"); Path path = Paths.get("file.txt"); Path path = Paths.get("/chemin/de/base", "sous- répertoire", "encore/plusieurs/répertoires", "file.txt");  Méthodes toPath() et toFile() 9
  • 10. JSR 203 - NIO.2 : accès complet aux systèmes de fichiers  Files : méthodes à tout faire boolean exists = Files.exists(path); boolean isDirectory = Files.isDirectory(path); boolean isExecutable = Files.isExecutable(path); boolean isHidden = Files.isHidden(path); boolean isReadable = Files.isReadable(path); boolean isRegularFile = Files.isRegularFile(path); boolean isWritable = Files.isWritable(path); long size = Files.size(path); FileTime time = Files.getLastModifiedTime(path); Files.delete(path); 10
  • 11. JSR 203 - NIO.2 : accès complet aux systèmes de fichiers  Copie et déplacement de fichiers Files.copy(Paths.get("source.txt"), Paths.get("dest.txt")); Files.copy(Paths.get("source.txt"), Paths.get("dest.txt"), StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.COPY_ATTRIBUTES ); Files.move(Paths.get("source.txt"), Paths.get("dest.txt")); Files.move(Paths.get("source.txt"), Paths.get("dest.txt"), StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.COPY_ATTRIBUTES, StandardCopyOption.ATOMIC_MOVE ); 11
  • 12. JSR 203 - NIO.2 : accès complet aux systèmes de fichiers  Lecture écriture fichier binaire byte[] byteArray = Files.readAllBytes(path); Files.write(path, byteArray);  Lecture écriture fichier texte List<String> lines = Files.readAllLines(path, charset); Files.write(path, lines, charset); 12
  • 13. JSR 203 - NIO.2 : accès complet aux systèmes de fichiers  Ouverture de flux divers // Ouverture en lecture : try ( InputStream input = Files.newInputStream(path) ) { ... } // Ouverture en écriture : try ( OutputStream output = Files.newOutputStream(path) ) { ... } // Ouverture d'un Reader en lecture : try ( BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8) ) { ... } // Ouverture d'un Writer en écriture : try ( BufferedWriter writer = Files.newBufferedWriter(path, StandardCharsets.UTF_8) ) { ... } 13
  • 14. JSR 203 - NIO.2 : accès complet aux systèmes de fichiers  DirectoryStream : lister les éléments d'un dossier ◦ Liste des fichiers/répertoires du répertoire courant : try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)){ for (Path path : stream) { System.out.println(path); } } ◦ Utiliser un filtre DirectoryStream.Filter<Path> filter = new DirectoryStream.Filter<Path>() { @Override public boolean accept(Path entry) throws IOException { return Files.isRegularFile(entry) && Files.size(entry) > 8192L; } }; try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, filter)) { for (Path path : stream) { System.out.println(path); } } 14
  • 15. JSR 203 - NIO.2 : accès complet aux systèmes de fichiers  DirectoryStream : lister les éléments d'un dossier ◦ Utiliser un filtre Path dir = Paths.get(); // current directory try ( DirectoryStream<Path> stream = Files.newDirectoryStream(dir, "*.txt")) { for (Path path : stream) { System.out.println(path); } } 15
  • 16. JSR 203 - NIO.2 : accès complet aux systèmes de fichiers  FileVisitor : parcours d'une arborescence Path dir = Paths.get(); // current directory Files.walkFileTree(dir, new SimpleFileVisitor<Path>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { System.out.println(file); return FileVisitResult.CONTINUE; } }); ◦ L'interface FileVisitor dispose de quatre méthodes:  visitFile() exécutée sur chaque fichier trouvé.  visitFileFailed() exécutée lorsqu'une erreur empêche l'accès au fichier.  preVisitDirectory() appelée avant le parcours d'un répertoire.  postVisitDirectory() appelée une fois le répertoire parcouru. 16
  • 17. JSR 203 - NIO.2 : accès complet aux systèmes de fichiers  FileAttributeView : accès aux attributs ◦ Accès complet aux attributs via un système de vue  BasicFileAttributeView (basic);  DosFileAttributeView (dos);  PosixFileAttributeView (posix);  FileOwnerAttributeView;  AclFileAttributeView (acl) ; ◦ Vérification du support Files.getFileStore(path).supportsFileAttributeView(D osFileAttributeView.class); 17
  • 18. JSR 203 - NIO.2 : accès complet aux systèmes de fichiers  FileAttributeView : accès aux attributs ◦ Accès en lecture/écriture aux attributs 'DOS' : DosFileAttributeView dosView = Files.getFileAttributeView(path, DosFileAttributeView.class); dosView.setArchive(false); DosFileAttributes attrs = dosView.readAttributes(); boolean a = attrs.isArchive(); 18
  • 19. JSR 203 - NIO.2 : accès complet aux systèmes de fichiers  WatchService : détecter les changements dans un répertoire // On crée un objet WatchService, chargé de surveiller le dossier : try (WatchService watcher = path.getFileSystem().newWatchService()) { // On y enregistre un répertoire, en lui associant certains types d'évènements : path.register(watcher, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY); // (ou plusieurs) // Puis on boucle pour récupérer tous les événements : while (true) { // On récupère une clef sur un événement (code bloquant) WatchKey watchKey = watcher.take(); // On parcourt tous les évènements associés à cette clef : for (WatchEvent<?> event: watchKey.pollEvents()) { if (event.king()==StandardWatchEventKinds.OVERFLOW) continue; // évènement perdu System.out.println(event.kind() + " - " + event.context()); } // On réinitialise la clef (très important pour recevoir les événements suivants) if ( watchKey.reset() ==false ) { // Le répertoire qu'on surveille n'existe plus ou n'est plus accessible break; } } } 19
  • 20. AWT/Swing  TransferHandler.setDragImage() pour définir une image à afficher pendant le drag&drop.  JList<E> et JComboBox<E>.  Window.setType() + Window.Type contenant trois valeurs possibles : ◦ NORMAL pour le comportement par défaut, ◦ POPUP pour les fenêtres temporaires, ◦ UTILITY pour les barres d'outils ou palettes.  BorderFactory s'enrichit de nouveaux types de bordures: ◦ createDashedBorder(), ◦ createLineBorder(), ◦ createLoweredSoftBevelBorder(), ◦ createRaisedSoftBevelBorder(), ◦ createSoftBevelBorder(), ◦ createStrokeBorder(). 20
  • 21. AWT/Swing  TRANSLUCENT - transparence globale ◦ setOpacity() pour définir le niveau d'opacité globale de la fenêtre final JFrame frame = new JFrame(); frame.setUndecorated(true); frame.add(new JLabel("Hello World !")); frame.setOpacity(0.75F); frame.getContentPane().setBackground(Color.BLACK); frame.setVisible(true); 21
  • 22. AWT/Swing  PERPIXEL_TRANSLUCENT - transparence pixel par pixel ◦ Permet de définir le niveau de transparence de chaque pixel de la fenêtre. ◦ Utiliser la méthode setBackground() final JFrame frame = new JFrame(); frame.setUndecorated(true); frame.add(new JLabel("Hello World !")); frame.setBackground(new Color(0F,0F,0F,0.75F)); frame.setVisible(true); 22
  • 23. AWT/Swing  PERPIXEL_TRANSPARENT - forme non rectangulaire ◦ Possible de créer des fenêtres non rectangulaires. ◦ On utilisera pour cela la méthode setShape() avec la forme désirée final JFrame frame = new JFrame(); frame.setUndecorated(true); frame.setShape(new RoundRectangle2D.Double(0,0,frame.getWidth(),frame.getHeight(),64,6 4)); frame.setBackground(Color.BLACK)); frame.setVisible(true); 23
  • 24. AWT/Swing  Nimbus, le nouveau LookAndFeel 24
  • 26. Une nouvelle API pour la manipulation des Date et heures (JSR 310)  Obtenir l’heure courrante: ◦ Avec la classe Clock: Clock clock = Clock.systemDefaultZone(); long time = clock.millis();  Obtenir la date et l’heure LocalDate date = LocalDate.now(); System.out.printf("%s-%s-%s", date.getYear(), date.getMonthValue(), date.getDayOfMonth() ); 26
  • 27. Une nouvelle API pour la manipulation des Date et heures (JSR 310)  Effectuer les calculs sur les dates et heures Period p = Period.of(5, HOURS); LocalTime time = LocalTime.now(); LocalTime newTime; newTime = time.plus(5, HOURS); newTime = time.plusHours(5); newTime = time.plus(p); 27
  • 28. Les expressions Lambda  Nouvelle syntaxe permettant d’écrire un « morceau de code ».  Se décompose en deux partie séparés par une flèche simple ( -> ), ◦ A gauche on retrouve la liste des paramètres entre parenthèses. ◦ A droite un bloc de code entre accolades. (Type arg1, Type arg2) -> { instruction1; instruction2; return value; } 28
  • 29. Les expressions Lambda  Exemple: l’implémentation d’un Comparator : ◦ Avant Java 8: Comparator<String> ignoreCase = new Comparator<String>() { @Override public int compare(String s1, String s2) { return s1.compareToIgnoreCase(s2); } }; ◦ Avec Java 8 Comparator<String> ignoreCase = (String s1, String s2) -> { return s1.compareToIgnoreCase(s2); }; ◦ Peut être simplifié Comparator<String> ignoreCase = (s1, s2) -> s1.compareToIgnoreCase(s2); 29
  • 30. Les expressions Lambda  Les références de méthode ◦ Permettent de référencer une méthode quelconque ◦ Syntaxe composée de deux parties séparées par le caractères dièse ( # )  La partie de gauche: au nom du type Java dans lequel on va rechercher la méthode.  La partie de droite: nom de la méthode, éventuellement suivi par le type de ses paramètres.  Exemple: Comparator<String> ignoreCase = String#compareToIgnoreCase(String); 30
  • 31. Les expressions Lambda  Les méthodes d’extension virtuelles ◦ Comblent les lacunes des interfaces Java:  Une interface publique d’une API ne peut plus être modifiée sous peine de provoquer des erreurs,  Cas des interfaces Collection, List ou Map ◦ Permettent de faire évoluer lesinterfaces en limitant les incompatibilités. 1. Rajouter des méthodes dans l’interface 2. Indiquer une méthode static représentant l’implémentation par défaut qui sera utilisée 31
  • 32. Les expressions Lambda: exemple  Trier une List ◦ Avant Java 8 Collections.sort(list, new Comparator<String>() { @Override public int compare(String a, String b) { return a.compareToIgnoreCase(b); } }); ◦ À partir de Java 8 Collections.sort(list, (String a, String b) -> a.compareToIgnoreCase(b) ); list.sort(String#compareToIgnoreCase); 32
  • 33. Les expressions Lambda: exemple  Gestion des listeners Swing ◦ Avant Java 8 button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { uneMethodAExecuterLorsDuClic(e); } }); ◦ À partir de Java 8 button.addActionListener(this#uneMethodAExecuterL orsDuClic); 33
  • 34. 34