Nouvelles fonctionnalités de Java 7

Réponses:

211

Fonctions et améliorations de Java SE 7 à partir des notes de mise à jour de JDK 7

Voici le résumé des nouvelles fonctionnalités de Java 7 sur la page des 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 linguistiques (Project Coin)
architecture de chargeur de classe de mise à niveau de base
        Méthode pour fermer un URLClassLoader
        Mises à jour de la concurrence et des collections (jsr166y)
i18n Unicode 6.0
        Amélioration des paramètres régionaux
        Paramètres régionaux utilisateur et paramètres régionaux d'interface utilisateur distincts
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 (protocole direct de sockets)
        Utiliser la pile IPv6 de Windows Vista
        TLS 1.2
Sec Cryptographie à courbe elliptique (ECC)
jdbc JDBC 4.1
pipeline XRender client pour Java 2D
        Créer de nouvelles API de plate-forme pour les fonctionnalités graphiques 6u10
        Look-and-feel Nimbus pour Swing
        Composant Swing JLayer
        Synthétiseur de sons Gervill [NOUVEAU]
web Mettre à jour la pile XML
mgmt Enhanced MBeans [MISE À JOUR]

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

Instruction Try-with-Resources

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 dans le 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;

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);
    }
}
didxga
la source
4
+1 Code pour les exemples de code difficiles à trouver. Pouvez-vous en ajouter?
Zasz
3
L'inférence de type améliorée semble être une triste copie de C # avec un changement étrange où une référence est tapée, mais l'objet ne l'est pas ?? Quelle comédie!
Zasz
1
@Zasz, oui bien sûr, il est en amélioration continue
didxga
Alors la question est à OP, quelle est votre opinion? Ces améliorations concernent-elles uniquement la productivité ou peuvent-elles vraiment améliorer les performances des programmes? Si aucun bytecode ne change, les nouvelles améliorations de langage peuvent-elles être utilisées avec le bytecode marqué comme 1.5?
Dmitriy R
Bien qu'il ne s'agisse pas d'une amélioration du langage, il y a la nouvelle Objectsclasse, avec des méthodes statiques pour éviter d'avoir à vérifier les références nulles. Exemple: if (obj != null && obj.equals(anotherObj))devientif (Objects.equals(obj, anotherObj))
Carcamano
13

Nouvelle fonctionnalité de Java Standard Edition (JSE 7)

  1. 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 de projet JxLayer sur java.net. La classe JLayer était initialement basée sur le projet JXLayer, mais son API a évolué séparément.

  2. 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 que d'instructions if-then-else chaînées.

  3. 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 à partir du contexte. Cette paire de crochets angulaires est officieusement appelée le diamant. Java SE 7 prend en charge l'inférence de type limitée 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 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);
  4. Attraper plusieurs types d'exceptions et relancer les 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'exception. 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 des types différents. L'exemple suivant, qui est valide 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 java.nio.filepackage et son package associé, java.nio.file.attribute, fournissent une prise en charge complète des E / S de fichiers et de 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/

rafraîchir
la source
6

Améliorations du langage de programmation Java @ Java7

  1. Littéraux binaires
  2. Chaînes dans l'instruction switch
  3. Essayez avec Resources ou ARM ( Automatic Resource Management )
  4. Gestion des exceptions multiples
  5. Exceptions supprimées
  6. soulignement en littéraux
  7. Inférence de type pour la création d'instances génériques à l'aide de la syntaxe Diamond
  8. Avertissements et erreurs du compilateur améliorés lors de l'utilisation de paramètres formels non réifiables avec les méthodes Varargs

Référence officielle Référence
officielle avec la référence wiki java8

Premraj
la source
Jusqu'au point! Les dix premiers résultats de recherche Google pour " Fonctionnalités Java " renvoient la liste (inutile):Simple, Object-Oriented, Portable, Platform independent, Secured...
Marinos An
3

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 est sorti le 28 juillet 2011, vous devriez donc maintenant vous rendre sur le site officiel java SE .

David G
la source
Pour info, c'est une bonne présentation mais assez ancienne et un peu démodée.
Alex Miller
J'ai reçu une page d'erreur en hébreu lorsque j'ai essayé ce lien - y a-t-il une copie plus à jour quelque part?
Simon Nickerson
1

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 plate-forme :

-support for dynamic languages

Vous trouverez ci-dessous le lien expliquant les fonctionnalités nouvellement ajoutées de JAVA 7, l'explication est claire avec les petits exemples possibles pour chaque fonctionnalité:

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

corail
la source
0

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:
    }

Soulignement dans les littéraux numériques

int val 12_15; long phoneNo = 01917_999_720L;

Utilisation d'une instruction catch unique pour lever plusieurs exceptions à l'aide de «|» 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»

Amit
la source
0

Je pense que ForkJoinPool et les améliorations associées à Executor Framework sont un ajout important à Java 7.

Dexter
la source
-2

La liste suivante contient des liens vers les pages d'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

Référence 1 Référence 2

Muhammad Imran Tariq
la source
1
Vous devriez donner des descriptions plus courtes ou des exemples au lieu de cette liste, ce que nous avons également pu découvrir sur la page officielle Java.
Ken Block