Nouvelles fonctionnalités de java 7
Quelles nouvelles fonctionnalités de java 7 vont être implémentées? Et que font-ils maintenant?
7 answers
Il s'agit d'une version de Java SE 7 avec des fonctionnalités et des améliorations
De JDK 7 Release Notes
Ceci est le résumé des nouvelles fonctionnalités de Java 7 de la page OpenJDK 7 features :
vm JSR 292: Support for dynamically-typed languages (InvokeDynamic) Strict class-file checking lang JSR 334: Small language enhancements (Project Coin) core Upgrade class-loader architecture Method to close a URLClassLoader Concurrency and collections updates (jsr166y) i18n Unicode 6.0 Locale enhancement Separate user locale and user-interface locale ionet JSR 203: More new I/O APIs for the Java platform (NIO.2) NIO.2 filesystem provider for zip/jar archives SCTP (Stream Control Transmission Protocol) SDP (Sockets Direct Protocol) Use the Windows Vista IPv6 stack TLS 1.2 sec Elliptic-curve cryptography (ECC) jdbc JDBC 4.1 client XRender pipeline for Java 2D Create new platform APIs for 6u10 graphics features Nimbus look-and-feel for Swing Swing JLayer component Gervill sound synthesizer [NEW] web Update the XML stack mgmt Enhanced MBeans [UPDATED]
Exemples de code pour les nouvelles fonctionnalités dans Java 1.7
Instruction Try-with-resources
Ceci:
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 plusieurs ressources à fermer:
try (
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dest))
{
// code
}
Traits de soulignement dans les littéraux numériques
int one_million = 1_000_000;
Chaînes dans commutateur
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;
Amélioration de l'inférence de type pour la Création d'instance générique
Map<String, List<String>> anagrams = new HashMap<String, List<String>>();
Devient:
Map<String, List<String>> anagrams = new HashMap<>();
Capture d'exception multiple
Ceci:
} 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
Ceci:
@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);
}
}
Nouvelle fonctionnalité de Java Standard Edition (JSE 7)
-
Décorez 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 similaire dans l'esprit au projet JxLayer project project at java.net. La classe JLayer était initialement basée sur le projet JXLayer, mais son API a évolué séparément.
-
Les Chaînes dans l'Instruction switch:
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 un bytecode plus efficace à partir d'instructions switch qui utilisent des objets String qu'à partir d'instructions if-then-else chaînées.
-
Inférence de type pour une 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 de la cadre. Cette paire d'équerres s'appelle officieusement le diamant. Java SE 7 prend en charge l'inférence de type limitée pour la création d'instance générique; vous ne pouvez utiliser l'inférence de type que si le type paramétré du constructeur est évident dans le 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 compile:
List<? extends String> list2 = new ArrayList<>(); l.addAll(list2);
-
Attraper plusieurs Types d'exceptions et Repenser les Exceptions avec un Type amélioré Vérification:
Dans Java SE 7 et versions ultérieures, un seul bloc catch peut gérer plus d'un type d'exception. Cette fonctionnalité peut réduire la duplication de code. Considérons 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, qui est valide dans Java SE 7 et versions ultérieures, élimine 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 java.nio.paquet de fichiers
Le paquet
java.nio.file
et son paquet associé, java.nio.fichier.attribut, fournir un support complet pour les E/S de fichiers et pour accéder 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
- Littéraux binaires
- les Chaînes dans l'Instruction switch
- Essayez avec des ressources ou ARM (Gestion automatique des ressources )
- Gestion des exceptions multiples
- Exceptions supprimées
- le trait de soulignement dans les littéraux
- Inférence de type pour la Création d'instance générique à l'aide de Diamond Syntaxe
- Amélioration des Avertissements et des erreurs du Compilateur Lors de l'Utilisation de Paramètres Formels Non Reifiables avec les méthodes Varargs
Référence Officielle
référence Officielle avec java8
wiki de référence
En plus de ce que John Skeet a dit, voici un aperçu du projet Java 7. Il comprend une liste et une description des fonctionnalités.
Remarque: JDK 7 a été publié le 28 juillet 2011, vous devriez donc maintenant aller sur le site officieljava SE .
Les changements de Langue:
-Project Coin (small changes)
-switch on Strings
-try-with-resources
-diamond operator
Changements de bibliothèque :
-new abstracted file-system API (NIO.2) (with support for virtual filesystems)
-improved concurrency libraries
-elliptic curve encryption
-more incremental upgrades
Changement de Plateforme:
-support for dynamic languages
Voici le lien expliquant les nouvelles fonctionnalités de JAVA 7, l'explication est limpide avec les petits exemples possibles pour chaque fonctionnalité:
Utilisation de l'opérateur Diamond() pour la création d'instance générique
Map<String, List<Trade>> trades = new TreeMap <> ();
Utilisation de chaînes dans les instructions switch
String status= “something”;
switch(statue){
case1:
case2:
default:
}
Underscore dans les littéraux numériques
Int val 12_15; longue phoneNo = 01917_999_720L;
Utilisation d'une seule instruction catch pour lancer plusieurs exceptions en utilisant l'opérateur " / "
catch(IOException | NullPointerException ex){
ex.printStackTrace();
}
Pas besoin de fermer () les ressources car Java 7 fournit try-with-resources déclaration
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 préfixe "0b" ou"0B"
La liste suivante contient des liens vers les pages améliorations de Java SE 7.
Swing
IO and New IO
Networking
Security
Concurrency Utilities
Rich Internet Applications (RIA)/Deployment
Requesting and Customizing Applet Decoration in Dragg able Applets
Embedding JNLP File in Applet Tag
Deploying without Codebase
Handling Applet Initialization Status with Event Handlers
Java 2D
Java XML – JAXP, JAXB, and JAX-WS
Internationalization
java.lang Package
Multithreaded Custom Class Loaders in Java SE 7
Java Programming Language
Binary Literals
Strings in switch Statements
The try-with-resources Statement
Catching Multiple Exception Types and Rethrowing Exceptions with Improved Type Checking
Underscores in Numeric Literals
Type Inference for Generic Instance Creation
Improved Compiler Warnings and Errors When Using Non-Reifiable Formal Parameters with Varargs Methods
Java Virtual Machine (JVM)
Java Virtual Machine Support for Non-Java Languages
Garbage-First Collector
Java HotSpot Virtual Machine Performance Enhancements
JDBC