web-dev-qa-db-fra.com

Nouvelles fonctionnalités de Java 7

Quelles nouvelles fonctionnalités de Java 7 vont être implémentées? Et que font-elles maintenant?

84
Serik

Java SE 7 Fonctionnalités et améliorations from Notes de mise à jour de JDK 7

Voici le résumé des nouvelles fonctionnalités de Java 7 figurant sur la page de la page sur les fonctionnalités d'OpenJDK 7 :

 vm JSR 292: Prise en charge des langages à typage dynamique (InvokeDynamic) 
 Vérification stricte des fichiers de classe 
 Lang JSR 334: Petites améliorations du langage (Project Coin) 
 Core Mettre à niveau l’architecture du chargeur de classes 
 Méthode pour fermer un chargeur URLClassLoader 
 Mises à jour simultanées et de collections (jsr166y) 
 I18n Unicode 6.0 
 Amélioration de la localisation 
 Paramètres régionaux distincts pour l'utilisateur et l'environnement local de l'interface utilisateur 
 Ionet JSR 203: Plus de nouvelles API d'E/S pour la plate-forme Java (NIO.2) 
 Fournisseur de système de fichiers NIO.2 pour les archives Zip/jar 
 SCTP (protocole de transmission de contrôle de flux) 
 SDP (Sockets Direct Protocol) 
 Utilisez la pile IPv6 de Windows Vista 
 TLS 1.2 
 Sec Cryptographie à courbe elliptique (ECC) 
 Jdbc JDBC 4.1 
 Client XRender pipeline pour Java 2D 
 Créer de nouvelles API de plate-forme pour les fonctionnalités graphiques 6u10 
 Aspect Nimbus pour Swing 
 Composant Swing JLayer 
 Synthétiseur de sons Gervill [NOUVEAU] 
 Web Mise à jour de la pile XML 
 Mgmt MBeans améliorés [MISE À JOUR] 

Exemples de code pour les nouvelles fonctionnalités de Java 1.7

Déclaration d'essai avec ressources

ce:

BufferedReader br = new BufferedReader(new FileReader(path));
try {
   return br.readLine();
} finally {
   br.close();
}

devient:

try (BufferedReader br = new BufferedReader(new FileReader(path)) {
   return br.readLine();
}

Vous pouvez déclarer plus d'une ressource à fermer:

try (
   InputStream in = new FileInputStream(src);
   OutputStream out = new FileOutputStream(dest))
{
 // code
}

Les soulignés dans les littéraux numériques

int one_million = 1_000_000;

Cordes en switch

String s = ...
switch(s) {
 case "quux":
    processQuux(s);
    // fall-through

  case "foo":
  case "bar":
    processFooOrBar(s);
    break;

  case "baz":
     processBaz(s);
    // fall-through

  default:
    processDefault(s);
    break;
}

Littéraux binaires

int binary = 0b1001_1001;

Inférence de type améliorée pour la création d'instances génériques

Map<String, List<String>> anagrams = new HashMap<String, List<String>>();

devient:

Map<String, List<String>> anagrams = new HashMap<>();

Capture d'exceptions multiples

ce:

} catch (FirstException ex) {
     logger.error(ex);
     throw ex;
} catch (SecondException ex) {
     logger.error(ex);
     throw ex;
}

devient:

} catch (FirstException | SecondException ex) {
     logger.error(ex);
    throw ex;
}

SafeVarargs

ce:

@SuppressWarnings({"unchecked", "varargs"})
public static void printAll(List<String>... lists){
    for(List<String> list : lists){
        System.out.println(list);
    }
}

devient:

@SafeVarargs
public static void printAll(List<String>... lists){
    for(List<String> list : lists){
        System.out.println(list);
    }
}
189
didxga

Nouvelle fonctionnalité de Java Standard Edition (JSE 7)

  1. Décorer les composants avec la classe JLayer: 

    La classe JLayer est un décorateur flexible et puissant pour les composants Swing. La classe JLayer dans Java SE 7 est semblable au projet de projet JxLayer de Java.net. La classe JLayer était initialement basée sur le projet JXLayer, mais son API a évolué séparément.

  2. Strings in switch Instruction:

    Dans le JDK 7, nous pouvons utiliser un objet String dans l'expression d'une instruction switch. Le compilateur Java génère généralement plus efficacement du bytecode à partir d'instructions switch utilisant des objets String que d'instructions chaînées if-then-else.

  3. Inférence de type pour l'instance générique: 

    Nous pouvons remplacer les arguments de type requis pour appeler le constructeur d'une classe générique par un ensemble vide de paramètres de type (<>) tant que le compilateur peut déduire les arguments de type à partir du contexte. Cette paire de chevrons est appelée de manière informelle diamant . Java SE 7 prend en charge l’inférence de type limité pour la création d’instances génériques; vous ne pouvez utiliser l'inférence de type que si le type paramétré du constructeur est évident à partir du contexte. Par exemple, l'exemple suivant ne compile pas:

    List<String> l = new ArrayList<>();
    l.add("A");
    l.addAll(new ArrayList<>());
    

    En comparaison, l'exemple suivant est compilé:

    List<? extends String> list2 = new ArrayList<>();
    l.addAll(list2);
    
  4. Attraper plusieurs types d'exceptions et renvoyer des exceptions avec une vérification de type améliorée: 

    Dans Java SE 7 et versions ultérieures, un seul bloc catch peut gérer plusieurs types d'exceptions. Cette fonctionnalité peut réduire la duplication de code. Considérez le code suivant, qui contient du code en double dans chacun des blocs catch:

    catch (IOException e) {
        logger.log(e);
        throw e;
    }
    catch (SQLException e) {
        logger.log(e);
        throw e;
    }
    

    Dans les versions antérieures à Java SE 7, il est difficile de créer une méthode commune pour éliminer le code dupliqué car la variable e a différents types . L'exemple suivant, valable dans Java SE 7 et versions ultérieures, élimine le code dupliqué :

    catch (IOException|SQLException e) {
        logger.log(e);
        throw e;
    }
    

    La clause catch spécifie les types d'exceptions que le bloc peut gérer, et chaque type d'exception est séparé par une barre verticale (|).

  5. Le package Java.nio.file

    Le package Java.nio.file et son package associé, Java.nio.file.attribute, fournissent une prise en charge complète des E/S sur fichiers et sur l'accès au système de fichiers. Un fournisseur de système de fichiers Zip est également disponible dans JDK 7.

Source: http://ohmjavaclasses.blogspot.com/

13
apresh
5
Premraj

En plus de ce que John Skeet a dit, voici un overview du projet Java 7 . Il comprend une liste et une description des fonctionnalités.

Remarque: JDK 7 étant sorti le 28 juillet 2011, vous devez maintenant vous rendre sur le site officiel de Java SE .

3
David G

Changements de langue:

-Project Coin (small changes)
-switch on Strings
-try-with-resources
-diamond operator

Modifications de la bibliothèque:

-new abstracted file-system API (NIO.2) (with support for virtual filesystems)
-improved concurrency libraries
-elliptic curve encryption
-more incremental upgrades

Changements de plateforme:

-support for dynamic languages

Vous trouverez ci-dessous le lien expliquant les nouvelles fonctionnalités de Java 7, expliquées de manière parfaitement claire, avec de petits exemples possibles pour chaque fonctionnalité:

http://radar.oreilly.com/2011/09/Java7-features.html

1
Coral

Utilisation de l'opérateur Diamond (<>) pour la création d'instances génériques

Map<String, List<Trade>> trades = new TreeMap <> ();

Utilisation de chaînes dans les instructions switch

String status=  “something”;
   switch(statue){
     case1: 
     case2: 
     default:
    }

Souligner en littéraux numériques

int val 12_15; long phoneNo = 01917_999_720L;

Utilisation d'une instruction catch unique pour générer plusieurs exceptions à l'aide de l'opérateur “|”

catch(IOException | NullPointerException ex){
          ex.printStackTrace();   
    }

Pas besoin de fermer les ressources () car Java 7 fournit une instruction try-with-resources

try(FileOutputStream fos = new FileOutputStream("movies.txt");
      DataOutputStream dos = new DataOutputStream(fos)) {
              dos.writeUTF("Java 7 Block Buster");
  } catch(IOException e) {
        // log the exception
  }

littéraux binaires avec le préfixe "0b" ou "0B"

0
Amit