Quelles nouvelles fonctionnalités de Java 7 vont être implémentées? Et que font-elles maintenant?
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]
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
}
int one_million = 1_000_000;
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;
}
int binary = 0b1001_1001;
Map<String, List<String>> anagrams = new HashMap<String, List<String>>();
devient:
Map<String, List<String>> anagrams = new HashMap<>();
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;
}
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);
}
}
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.
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.
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);
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 (|).
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.
Améliorations du langage de programmation Java @ Java7
Référence officielle
Référence officielle avec Java8
référence wiki
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 .
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é:
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"