1. Nouvelles fonctionnalités de Java JDK1.5
1. Génériques:
List <string> strs = new ArrayList <string> (); // spécifiez le type de stockage pour la collection. Lors du stockage des données dans la collecte ci-dessus, les données de la chaîne doivent être stockées, sinon le compilateur rapportera une erreur
2. pour chaque
Par exemple, nous pouvons traverser la collection ci-dessus à travers pour chaque
pour (String s: strs) {System.out.println (s);}Remarque: Lors de l'utilisation de For-each pour traverser une collection, la collection à Traverse doit implémenter l'interface itérateur
3. Fonctions automatiques de déballage et d'emballage
La copie de code est la suivante:
Qu'est-ce que ça veut dire?
JDK1.5 définit une classe d'encapsulation pour chaque type de données de base. Faire les types de données de base dans Java ont également leurs propres objets, par exemple: int -> entier,
Double -> Double,
long -> long,
char -> caractère,
flotter -> flotter,
booléen -> booléen,
court -> court,
octet -> octet
Emballage automatique: convertir les types de base en objets, par exemple: int -> entier
Démacking automatique: convertir les objets en types de données de base, par exemple: entier -> int
Le problème que la collection ne pouvait pas stocker les types de données de base avant JDK1.5 peut désormais être résolu.
4. Énumération:
L'énumération est une caractéristique comparative introduite par JDK1.5. Le mot-clé est enum
Par exemple: définir une énumération représentant un feu de circulation
Public Enum Myenum {rouge, vert, jaune}5. Paramètres variables
Qu'est-ce que ça veut dire? Permettez-moi de vous donner un exemple: avant JDK1.5, lorsque nous voulions passer plusieurs paramètres du même type à une méthode, nous avions deux méthodes pour la résoudre, 1. Transférer directement un tableau, 2. Passer autant de paramètres qu'il y en a.
Par exemple:
public void printColor (chaîne rouge, chaîne verte, chaîne jaune) {} ou
public void printColor (String [] couleurs) {} Bien que les paramètres de la méthode d'écriture puissent ainsi réaliser l'effet que nous voulons, n'est-ce pas un peu gênant? De plus, que devons-nous faire si le nombre de paramètres est incertain? Les paramètres variables fournis par Java JDK1.5 peuvent parfaitement résoudre ce problème, par exemple:
public void printColor (string ... couleurs) {}
Cela peut être défini comme celui-ci, qu'est-ce que cela signifie? Si les paramètres sont du même type, vous pouvez utiliser le formulaire "Type + trois points, suivi d'un nom de paramètre". L'avantage de cela est que tant que les types de paramètres sont les mêmes, il n'y a pas de limite au nombre de paramètres passés: le paramètre variable doit être le dernier élément de la liste des paramètres (cette fonctionnalité s'applique aux types de données de l'objet et de base)
6. Importation statique
Avantages: L'utilisation d'importation statique peut rendre toutes les variables statiques et les méthodes statiques de la classe importée directement visible dans la classe actuelle. L'utilisation de ces membres statiques n'a pas besoin de donner leurs noms de classe.
Inconvénients: la surutilisation réduira la lisibilité du code
7. Bibliothèque de concurrence de thread
La bibliothèque de concurrence du thread est une fonctionnalité avancée de multithreading proposée par Java 1.5. Il est situé dans le package: java.util.concurrent
inclure
1. Classe d'outils de thread Mutex Description: verrouillage, RedWritelock
2. DESCRIPTION DE COMMUNICATION DU FILLE: Condition
3. Piscine de filetage
EXIMPTORORSERVICE
3. Synchronisez la file d'attente
ArrayBlockingQueue
4. Synchroniser les collections
Concurrenthashmap, copyonwritearraylist
5. outil de synchronisation du thread
Sémaphore
Il y a encore de nombreux contenus (très importants) sur les bibliothèques de concurrence de fil, donc je ne les énumérerai pas ici. Les amis intéressés peuvent consulter les documents d'aide.
2. Nouvelles fonctionnalités de JDK1.6
1.Desktop Class et SystemTray Class
Le premier peut être utilisé pour ouvrir le navigateur par défaut du système pour parcourir l'URL spécifiée, ouvrir le client de messagerie par défaut du système pour envoyer des e-mails à l'adresse e-mail spécifiée, utiliser l'application par défaut pour ouvrir ou modifier les fichiers (par exemple, utiliser le bloc-notes pour ouvrir un fichier avec TXT comme suffixe) et utiliser l'imprimante par défaut du système pour imprimer des documents; Ce dernier peut être utilisé pour créer un programme de plateau dans la zone du plateau système.
2. Utilisez Jaxb2 pour implémenter la cartographie entre les objets et XML
JAXB est l'abréviation de l'architecture Java pour la liaison XML, qui peut convertir un objet Java au format XML et vice versa.
Nous appelons le mappage entre les objets et les bases de données relationnelles ORM, et en fait, le mappage entre les objets et XML peut également être appelé OXM (mappage XML d'objet). Il s'avère que Jaxb fait partie de Java EE. Dans JDK1.6, Sun le met dans Java SE, qui est également la pratique habituelle de Sun. La version JAXB fournie avec JDK1.6 est 2.0. Par rapport à 1,0 (JSR 31), JAXB2 (JSR 222) utilise la nouvelle annotation de la fonction JDK5 pour identifier les classes et les attributs à lier, ce qui simplifie considérablement la charge de travail de développement. En fait, dans Java EE 5.0, les services EJB et Web simplifient également le développement par annotation. De plus, JaxB2 utilise Stax (JSR 173) pour traiter les documents XML en bas.
En plus de JAXB, nous pouvons également atteindre les mêmes fonctions via XMLBeans et Castor, etc.
3. Comprendre Stax
Stax (JSR 173) est une autre API pour le traitement des documents XML dans JDK1.6.0 en plus de DOM et SAX.
Origine de Stax: il existe deux façons de traiter les documents XML dans JAXP1.3 (JSR 206): DOM (modèle d'objet de document) et SAX (API simple pour XML).
Étant donné que JAXB2 (JSR 222) et JAX-WS 2.0 (JSR 224) dans JDK1.6.0 Utilisez Stax, Sun a décidé d'ajouter Stax à la famille JAXP et de mettre à niveau la version JAXP vers 1.4 (JAXP1.4 est la version de maintenance de JAXP1.3). La version JAXP dans JDK1.6 est 1,4. Stax est l'API de streaming pour l'abréviation de XML, une API qui utilise des documents XML à traction. Stax fournit une API basée sur un itérateur d'événements pour permettre aux programmeurs de contrôler le processus d'analyse du document XML. Le programme traverse cet itérateur d'événements pour traiter chaque événement d'analyse. L'événement d'analyse peut être considéré comme étant retiré par le programme, c'est-à-dire que le programme invite l'analyseur à générer un événement d'analyse, puis gère l'événement, puis fait générer l'analyseur l'événement d'analyse suivante. Cela boucle jusqu'à ce que le caractère de fin du document soit rencontré. Le Sax traite également des documents XML basés sur des événements, mais utilise le mode push pour analyser. Une fois l'analyse analysant le document XML complet, il ne génère que des événements d'analyse, puis les pousse au programme pour traiter ces événements. Le DOM adopte la méthode pour cartographier l'ensemble du document XML dans une arborescence de mémoire, de sorte que les données du nœud parent, du nœud enfant et des nœuds frère peuvent être facilement obtenus, mais si le document est grand, il affectera sérieusement les performances.
4. Utilisez l'API du compilateur
Nous pouvons maintenant utiliser l'API du compilateur de JDK1.6 (JSR 199) pour compiler dynamiquement les fichiers source Java. L'API du compilateur combine la fonction de réflexion pour obtenir une génération dynamique de code Java et compiler et exécuter ces codes, ce qui est un peu une fonctionnalité de langage dynamique.
Cette fonctionnalité est très utile pour certaines applications qui nécessitent une compilation dynamique, comme le serveur Web JSP. Lorsque nous modifions manuellement JSP, nous ne voulons pas redémarrer le serveur Web pour voir l'effet. À l'heure actuelle, nous pouvons utiliser l'API du compilateur pour implémenter la compilation dynamique des fichiers JSP. Bien sûr, le serveur Web JSP actuel prend également en charge le déploiement à chaud JSP. Le serveur Web JSP actuel appelle Javac via runtime.exec ou processBuilder pour compiler le code pendant l'opération. Cette méthode nous oblige à générer un autre processus pour effectuer une compilation, ce qui n'est pas suffisamment élégant et est facile à rendre le code dépend d'un système d'exploitation spécifique. L'API du compilateur fournit un moyen plus riche de faire une compilation dynamique via un ensemble d'API standard facile à utiliser, et il est multiplateforme.
5. API du serveur HTTP léger
JDK1.6 fournit une simple API de serveur HTTP. Selon cela, nous pouvons créer notre propre serveur HTTP embarqué, qui prend en charge les protocoles HTTP et HTTPS et fournit une partie de l'implémentation de HTTP1.1. La pièce qui n'est pas implémentée peut être implémentée en étendant l'API du serveur HTTP existant. Les programmeurs doivent implémenter en eux-mêmes l'interface httphandler. HTTPSServer appellera la méthode de rappel de la classe d'implémentation HTTPHandler pour gérer les demandes du client. Ici, nous appelons une demande HTTP et sa réponse un échange, qui est enveloppé dans une classe httpexchange. HttpServer est responsable du passage Httpexchange à la méthode de rappel de la classe d'implémentation HTTPHandler.
6. API de traitement d'annotation enfichable (API de traitement d'annotation enfichable)
L'API de traitement d'annotation plug-in (JSR 269) fournit une API standard pour gérer les annotations (JSR 175)
En fait, JSR 269 n'est pas seulement utilisé pour gérer l'annotation. Je pense que la fonction la plus puissante est qu'il établit un modèle de la langue java elle-même. Il mappe des éléments de langue Java tels que la méthode, le package, le constructeur, le type, la variable, l'énumération, l'annotation en types et éléments (quelle est la différence entre les deux?), Mappant ainsi la sémantique de la langue java en objets. Nous pouvons voir ces classes sous le package javax.lang.model. Nous pouvons donc utiliser l'API fournie par JSR 269 pour créer un environnement de métaprogrammation riche en fonctionnalités. JSR 269 utilise un processeur d'annotation pour traiter l'annotation pendant la compilation plutôt que pendant le fonctionnement. Le processeur d'annotation équivaut à un plug-in du compilateur, il est donc appelé traitement d'annotation d'insertion. Si un nouveau code Java est généré lorsque le processeur d'annotation traite l'annotation (exécution de la méthode de processus), le compilateur appellera à nouveau le processeur d'annotation. Si un nouveau code est généré pour le deuxième traitement, il appellera alors le processeur d'annotation jusqu'à ce qu'aucun nouveau code ne soit généré. Chaque fois que la méthode Process () est exécutée, elle est appelée "ronde", de sorte que l'ensemble du processus de traitement d'annotation peut être considéré comme une séquence ronde.
JSR 269 est principalement conçu comme une API pour les outils ou les conteneurs. Par exemple, nous voulons établir un cadre de test unitaire basé sur l'annotation (tel que le testNG) pour utiliser l'annotation pour identifier les méthodes de test qui doivent être exécutées pendant le test.
7. Utiliser la console pour développer des programmes de console
JDK1.6 fournit la classe Java.io.Console spécifiquement utilisée pour accéder aux appareils de console basés sur des caractères. Si votre programme souhaite interagir avec CMD sous Windows ou Terminal sous Linux, vous pouvez utiliser la classe Console pour le faire. Mais nous n'obtenons pas toujours la console disponible, si une JVM a la console disponible dépend de la plate-forme sous-jacente et de la façon dont le JVM est appelé. Si le JVM est démarré sur une ligne de commande interactive (telle que Windows CMD) et que l'entrée et la sortie ne sont pas redirigées ailleurs, vous pouvez obtenir une instance de console disponible.
8. Prise en charge des langues de script
Tels que: Ruby, Groovy, Javascript.
9. Annotations communautaires
Les annotations courantes faisaient à l'origine partie de la spécification Java EE 5.0 (JSR 244), et maintenant Sun en met une partie dans Java SE 6.0.
Avec l'ajout de la fonction de métadonnées d'annotation (JSR 175) à Java SE 5.0, de nombreuses technologies Java (telles que EJB et services Web) utiliseront une pièce d'annotation pour remplacer les fichiers XML pour configurer des paramètres d'exécution (ou prendre en charge la programmation déclarative, telles que les transactions déclaratives d'EJB). Si ces technologies définissent leurs propres otations séparément à des fins générales, c'est évidemment un peu de construction en double. Par conséquent, il est utile de définir un ensemble d'annotation publique pour d'autres technologies Java connexes. Il peut éviter la construction en double tout en garantissant la cohérence de diverses technologies de Java SE et Java EE.
Le suivant répertorie 10 annotations Annotations communes Annotation Rétention cible Description Généré SourceanNotation_Type, Constructeur, champ, local_variable, méthode, package, paramètre, type. Le code source généré par l'annotation est utilisé pour étiqueter la ressource générée. Le conteneur injecte des dépendances de ressources externes en fonction de cela. Il existe deux méthodes: l'injection sur le terrain et l'injection basée sur le secteur. Ressexes des ressources. Type étiquette plusieurs dépendances externes en même temps. Le conteneur injectera toutes ces dépendances externes dans la méthode postconstructime. La méthode s'exécute après que le conteneur injecte toutes les dépendances pour effectuer des travaux d'initialisation après l'injection de dépendance. Une seule méthode peut être étiquetée par la méthode d'exécution de la prédication postconstruction. Avant que l'instance de l'objet ne soit sur le point d'être supprimé du conteneur, la méthode de rappel à exécuter doit être étiquetée comme le type d'exécution Runas Prestestroy est utilisée pour étiqueter le rôle de sécurité pour exécuter la méthode de la classe étiquetée. Ce rôle de sécurité doit être cohérent avec le rôle de sécurité du conteneur. Le type d'exécution rôles a été utilisé, la méthode est utilisée pour étiqueter les rôles de sécurité qui permettent l'exécution de classes ou de méthodes étiquetées. Ce rôle de sécurité doit être cohérent avec le rôle de sécurité des conteneurs. La méthode permet à tous les rôles d'exécuter des classes ou des méthodes étiquetées. Denyall Runtime Type. La méthode ne permet à aucun rôle d'exécuter des classes ou des méthodes étiquetées, indiquant que la classe ou les méthodes ne peut pas s'exécuter dans le conteneur Java EE. Le type d'exécution de Declareoles est utilisé pour définir les rôles de sécurité qui peuvent être testés par l'application. Il est généralement utilisé pour utiliser l'isuseRrole pour vérifier les rôles de sécurité.
Avis:
1. Rôles en main, Permitall et Denyall ne peuvent pas être appliqués à la classe ou à une méthode Rolesallowed, permisall et denyall étiqueté sur la classe écraseront les rôles et les déclarères permis, les denyallrunas, les rôles pour gérer les annotations ci-dessus, le contenant des annotations ci-dessus est fait par le contenant java ee. Java SE6.0 ne contient que les classes de définition des cinq premières annotations dans le tableau ci-dessus et ne contient pas le moteur pour gérer ces annotations. Ce travail peut être effectué par l'API de traitement d'annotation enfichable (JSR 269).
Par rapport aux nouvelles fonctionnalités de 1,6, les nouvelles fonctionnalités de 1,7 nous rendent plus excités car c'est quelque chose que nous attendons avec impatience et visible et tangible.
3. Nouvelles fonctionnalités de JDK1.7
1. Valeur faciale binaire
Dans Java7, la valeur du type de mise en forme (octet, court, int, long) peut être représentée par des types binaires. Lorsque vous utilisez des valeurs binaires, OB ou OB doivent être ajoutés devant lui, par exemple:
int a = 0b01111_00000_11111_00000_10101_01010_10; court b = (court) 0b01100_00000_11111_0; octet c = (octet) 0b00000_0001;
2. Prise en charge des variables numériques pour les lignes coulissantes
JDK1.7 peut ajouter une ligne de diapositive à une variable de type numérique.
Mais il y a quelques endroits qui ne peuvent pas être ajoutés
1. Le début et la fin du nombre
2. Avant et après le point décimal
3. Avant f ou l, par exemple:
int num = 1234_5678_9;
float num2 = 222_33f;
long num3 = 123_000_111l;
3. Prise en charge de Switch pour la chaîne
Avez-vous toujours eu un point d'interrogation auparavant? Pourquoi C # est-il disponible en Java mais pas? Ha, mais Java est également OK après JDK1.7, par exemple:
String status = "Orderstate"; switch (status) {case "OrderCancel": System.out.println ("Order Annulation"); casser; cas "Ordersuccess": System.out.println ("abonnement réussi"); casser; par défaut: System.out.println ("Status inconnu"); }4. Transfort-resource
Try-with-Resources est une déclaration d'essai qui définit une ou plusieurs ressources. Cette ressource fait référence à l'objet que le programme doit fermer après son traitement. TRYS-WITH-RESOURCES garantissent que chaque ressource est fermée une fois le traitement terminé.
Les ressources qui peuvent utiliser les ressources TRY-With sont:
Tout objet qui implémente l'interface java.lang.autocloseable Java.io.closeable interface.
Par exemple:
La chaîne statique publique readFirstLineFromFile (String Path) lève ioException {Try (BufferedReader br = new BuffereDaDer (new FileReader (path))) {return br.readline (); }}
Dans les versions Java 7 et ultérieures, BufferedReader implémente l'interface java.lang.autoclosable.
Étant donné que le chef de tampon est défini dans la déclaration TRY-With-Resources, il sera automatiquement désactivé, que l'instruction TRY soit normale ou anormale. Avant Java7, vous devez utiliser les blocs enfin pour fermer cet objet.
5. Catchez plusieurs exceptions et remontez l'exception avec une vérification améliorée de type
Par exemple:
public static void first () {try {bufferedReader Reader = new BufferedReader (new FileReader ("")); Connexion con = null; Instruction stmt = con.createStatement (); } catch (ioException | sqlexception e) {// capture plusieurs exceptions, e est le type final e.printStackTrace (); }}Avantages: L'utilisation d'une prise pour gérer plusieurs exceptions est plus petite et plus efficace que l'utilisation de plusieurs prises pour gérer une exception au bytecode généré par le traitement d'une exception.
6. Tapez l'inférence lors de la création de génériques
Tant que le compilateur peut déduire les paramètres de type à partir du contexte, vous pouvez remplacer les paramètres génériques par une paire de supports d'angle vides <>. Cette paire de supports s'appelle des diamants en privé. Avant Java SE 7, vous devriez le faire lorsque vous déclarez un objet générique
List <string> list = new ArrayList <string> ();
Et après Java SE7, vous pouvez le faire
List <string> list = new ArrayList <> ();
Étant donné que le compilateur peut déduire les paramètres de type de la précédente (liste), vous ne pouvez plus écrire des paramètres génériques après la liste Array suivante, utilisez simplement une paire de supports d'angle vides. Bien sûr, vous devez porter un "diamant" <>, sinon il y aura un avertissement.
Java SE7 ne prend en charge que l'inférence du type limité: vous ne pouvez utiliser l'inférence du type que si le type paramétré du constructeur est considérablement déclaré dans le contexte, sinon il ne fonctionnera pas.
List <string> list = new ArrayList <> (); list.add ("a"); // Cela ne fonctionne pas list.addall (new ArrayList <> ()); // Cela peut être lister <? étend String> list2 = new ArrayList <> (); list.addall (list2);
7. (Aucun)
8. Ajouter de nouveaux outils et méthodes pour obtenir des informations environnementales
Par exemple:
File System.getUserHomeDir () // Répertoire utilisateur actuel System.GetUserDir () // RÉPERTOIRE où vous êtes lorsque vous démarrez le processus Java Process 5 System.getJavaioTempDir () // IO Temporary Falder File System.getJavahoMedir () // JRE INSTALLATION DIRECTRY FILE SYSTEM.GETJAVAHOMEDIR () // JRE INSTALLATION DIRECTION
9. Ajout sûr, soustraction, multiplication et division
Par exemple:
int math.safetoint (Valeur longue) int math.safenegate (Int Value) long Math.SafeSubstract (Long Value1, int Value2) long Math.Safesubstract (Long Value1, Long Value2) int math.safultiply (int Value1, int Value2) long. Math.SaFenegate (Long Value) int math.safEadd (int Value1, int Value2) long Math.SaFeadd (Long Value1, int Value2) long Math.SaFeadd (Long Value1, Long Value2) int math.SafeSubstract (int Value1, int Value2)
Eh bien, tant de choses ont été réglées jusqu'à présent. Je l'ajouterai plus tard.
Il convient de noter que si vous n'êtes pas sûr de votre version JDK précédente, n'utilisez pas de nouvelles fonctionnalités, sinon il peut y avoir des problèmes de tel ou cela.