1. Des chaînes peuvent être ajoutées à l'instruction conditionnelle switch. La méthode consiste à utiliser la valeur hashcode() de la chaîne pour obtenir la valeur réelle.
2. Ajout d'un système de base pouvant être utilisé en littéraux, binaires, en ajoutant "0b" ou "0B" devant le nombre.
3. Utilisez des traits de soulignement dans les littéraux numériques pour séparer les nombres afin de faciliter la lecture sans affecter la taille de la valeur. Le principe de base est que les soulignements ne peuvent apparaître que s'il y a des chiffres avant et après eux.
4.java7 a apporté deux modifications aux exceptions :
4.1. Prend en charge la capture de plusieurs exceptions en même temps dans une clause catch, et l'autre consiste à rendre le type d'exception plus précis lors de la capture et de la relance des exceptions. La méthode addSuppressed a été ajoutée à la classe Throwable dans Java 7. Lorsqu'une exception est levée, d'autres exceptions peuvent être supprimées à cause de l'exception et ne peuvent donc pas être levées normalement. À ce stade, vous pouvez enregistrer ces méthodes supprimées via la méthode addSuppressed. Les exceptions supprimées apparaîtront dans les informations de pile des exceptions levées. Vous pouvez également obtenir ces exceptions via la méthode getSuppressed. L’avantage est qu’aucune exception ne sera perdue, ce qui facilite les tests pour les développeurs.
Java7 améliore la syntaxe de la clause catch, permettant d'y spécifier plusieurs exceptions. Chaque type d'exception est séparé par "|". Il convient de noter que les exceptions capturées dans la clause catch ne peuvent pas avoir de types répétés, et que l'une des exceptions n'est pas non plus autorisée à être une sous-classe d'un autre paramètre d'exception, sinon une erreur de compilation se produira (de petite à majuscule, il n'y a pas de problème ). Si plusieurs exceptions sont déclarées dans la clause catch, le type spécifique du paramètre d'exception est la limite supérieure minimale de tous ces types d'exception.
4.2 Utilisez try (application de ressources) {traitement métier} pour libérer automatiquement les ressources qui peuvent être gérées par les instructions try doivent remplir une condition, c'est-à-dire que leur classe Java doit implémenter l'interface java.lang.AutoCloseable, sinon une erreur de compilation se produira. se produira. La méthode close de cette interface sera automatiquement appelée lorsque des ressources devront être libérées.
5. Optimisez les appels de méthode avec des paramètres de longueur variable :
Une nouvelle fonctionnalité introduite dans j2se5.0 consiste à permettre l'utilisation de paramètres de longueur variable dans les déclarations de méthode. Le dernier paramètre formel d'une méthode peut être spécifié pour représenter n'importe quel nombre de paramètres du même type. Lorsqu'ils sont appelés, ces paramètres sont transmis sous la forme d'un tableau. Ces paramètres peuvent également être référencés sous forme de tableaux dans le corps de la méthode.
6. Java 7 introduit une nouvelle annotation @SafeVarargs Si le développeur est sûr qu'une méthode qui utilise des paramètres de longueur variable ne provoquera pas une situation similaire lorsqu'elle est utilisée avec une classe générique, elle peut être déclarée avec cette annotation. L'annotation @SafeVarargs ne peut être utilisée que sur des méthodes ou des constructeurs avec des longueurs de paramètres variables, et la méthode doit être déclarée statique ou finale, sinon une erreur de compilation se produira. Le principe pour qu'une méthode soit annotée avec @SafeVarargs est que le développeur doit s'assurer que le traitement des paramètres de type génériques dans l'implémentation de cette méthode ne provoque pas de problèmes de sécurité de type.
7.Java prend en charge certains langages de script dans la machine virtuelle Java via le moteur de script. En fait, le gestionnaire du moteur de script prend en charge trois méthodes de moteur de recherche, qui sont complétées par le nom, l'extension de fichier et le type MIME. comme
7.1 Liaison linguistique :
Un grand avantage de l'API de prise en charge du langage de script est qu'elle standardise l'interaction entre le langage Java et le langage de script, de sorte que les programmes écrits en langage Java puissent effectuer des appels de méthode bidirectionnels et des transferts de données avec des scripts. Le transfert de données s'effectue via des objets de liaison de langage. L'objet de liaison de langage est une simple table de hachage utilisée pour stocker et obtenir des données qui doivent être partagées. Toutes les données correspondent à une entrée dans cette table de hachage et constituent une simple paire nom-valeur. L'interface javax.script.Bingings définit l'interface des objets de liaison de langage, qui hérite de l'interface java.util.Map. Un moteur de script peut utiliser plusieurs objets de liaison de langage lors de l'exécution. Différentes langues ont différentes portées pour lier des objets. Par défaut, le moteur de script fournira plusieurs objets de liaison de langage pour stocker les objets globaux générés lors de l'exécution. La classe ScriptEnging fournit des méthodes put et get pour fonctionner sur les objets de liaison de langage par défaut utilisés spécifiquement dans le moteur de script. Les programmes peuvent utiliser directement cet objet de liaison de langage par défaut, ou ils peuvent utiliser leurs propres objets de liaison de langage. Lors de l'exécution du script, l'objet de liaison de langage peut être considéré comme une table de mappage de variables supplémentaire. Les noms dans les objets de liaison de langage sont également pris en compte lors de l'analyse des valeurs des variables. Les variables globales et autres contenus générés lors de l'exécution du script apparaîtront dans l'objet de liaison de langage. De cette façon, le transfert de données bidirectionnel entre Java et le langage de script est terminé.
Par exemple, une chaîne nommée « nom » est ajoutée à l'objet de liaison de langage par défaut du moteur de script via la méthode put de ScriptEngine, puis l'objet est directement référencé par son nom dans le script. De même, la variable globale « message » créée dans le script peut également être obtenue via la méthode get de ScriptEnging. Cela permet un transfert de données bidirectionnel entre les programmes Java et les scripts. La conversion de type pendant le transfert de données est effectuée par le moteur de script et les règles de conversion dépendent de la grammaire du langage spécifique.
Dans la plupart des cas, l'utilisation des méthodes put et get de ScriptEnging est suffisante. Si seules les méthodes put et get sont utilisées, l'objet de liaison de langage lui-même est transparent pour le développeur. Dans certains cas, il est nécessaire d'utiliser le propre objet de liaison de langage du programme. Par exemple, l'objet de liaison de langage contient les propres données uniques du programme. Si vous souhaitez utiliser votre propre objet de liaison de langage, vous pouvez appeler la méthode creatBingings du moteur de script ou créer un objet javax.script.SimpleBingings et le transmettre à la méthode eval du moteur de script, par exemple :
L'objet de liaison de langage transmis via la méthode eval ne prend effet que dans l'appel eval en cours et ne modifie pas l'objet de liaison de langage par défaut du moteur.
7.2 Contexte d'exécution du script Une autre interface importante liée à l'exécution du moteur de script est javax.script.ScriptContext, qui contient des informations contextuelles pertinentes lors de l'exécution du moteur de script. Elle peut être comparée à l'interface javax.servlet.ServletContext dans la spécification de servlet dans JavaEE. . Le moteur de script obtient des informations relatives à l'exécution du script en faisant référence à l'objet contextuel et permet également aux développeurs de configurer le comportement du moteur de script via cet objet. Les objets supérieurs et inférieurs contiennent principalement les trois types d'informations suivants.
7.2.1 Entrée et sortie Tout d'abord, les informations de configuration liées aux entrées et sorties du script sont introduites, y compris l'objet java.io.Reader utilisé par le script pour lire les données entrées pendant l'exécution et le java.io.Writer qui génère le contenu correct et informations d'erreur. Par défaut, l'entrée et la sortie du script se produisent dans la console standard. Si vous souhaitez écrire la sortie du script dans un fichier, vous pouvez utiliser le code suivant. Redirigez la sortie du script vers un fichier via la méthode setWriter. Grâce aux méthodes setReader et setErrorWriter de ScriptContext, vous pouvez respectivement définir la source d'entrée des données lorsque le script est exécuté et la destination de sortie du message d'erreur lorsqu'une erreur se produit.
7.2.2 Propriétés personnalisées
ScriptContext dispose également de méthodes pour obtenir et définir des attributs similaires à ceux de ServletContext, à savoir setAttribute et getAttribute. La différence est que les attributs de ScriptContext sont étendus. La différence entre les différentes étendues réside dans l'ordre de recherche. Chaque étendue utilise un entier correspondant pour représenter son ordre de recherche. Plus la valeur entière est petite, plus la priorité est élevée dans l'ordre de recherche. Les propriétés dans une étendue avec une priorité plus élevée masqueront les propriétés portant le même nom dans une étendue avec une priorité inférieure. Par conséquent, vous devez spécifier explicitement la portée lors de la définition des propriétés. Lors de l'obtention d'attributs, vous pouvez choisir de rechercher dans une étendue spécifiée ou de rechercher automatiquement en fonction de la priorité de l'étendue.
Cependant, la portée incluse dans l'implémentation du contexte d'exécution du script est fixe. Les développeurs ne sont pas libres de définir leur propre périmètre. Une liste de toutes les étendues disponibles peut être obtenue via la méthode getScopes de ScriptContext. Il existe deux portées prédéfinies dans SciptContext : la portée représentée par la constante ScriptContext.ENGINE_SCOPE correspond au moteur de script actuel, et la portée représentée par ScriptContext.GLOBAL_SCOPE correspond à tous les objets du moteur de script créés à partir de la même fabrique de moteur. Le premier a une priorité plus élevée. Par exemple:
7.2.3 Objets de liaison de langage
Le dernier type d'information dans le contexte d'exécution du script est l'objet de liaison de langage. Les objets de liaison de langage correspondent également aux étendues. Le même ordre de priorité de portée s’applique aux objets liés au langage. Cet ordre de priorité aura un impact sur la résolution des variables lors de l'exécution du script. Par exemple:
liaisons.put("nom","Monde")
moteur.eval("println(nom);");
7.3 Compilation de scripts :
Les langages de script sont généralement interprétés et exécutés. Le moteur de script doit analyser le script avant de l'exécuter au moment de l'exécution. De manière générale, l'exécution d'un script via l'interprétation sera plus lente que son exécution après compilation. Lorsqu'un script doit être exécuté plusieurs fois, il peut d'abord être compilé. Le script compilé n'a pas besoin d'être analysé à plusieurs reprises lors de son exécution, ce qui peut améliorer l'efficacité de l'exécution. Tous les moteurs de script ne prennent pas en charge la compilation de scripts. Si un moteur de script prend en charge cette fonctionnalité, il implémentera l'interface javax.script.Compilable pour le déclarer. Les utilisateurs de moteurs de script peuvent profiter de cette fonctionnalité pour améliorer l'efficacité des scripts qui doivent être exécutés plusieurs fois. Le moteur de script JavaScript fourni avec Java SE prend en charge la compilation de scripts.
Dans le code suivant, la méthode compile de l'interface Compilable est utilisée pour compiler le code du script et le résultat de la compilation est représenté par javax.script.CompiledScript. Étant donné que tous les moteurs de script ne prennent pas en charge l'interface Compilable, instanceof doit être utilisé ici à des fins de jugement. Dans la méthode run, le script peut être exécuté via la méthode eval de CompiledScript. Dans le code, un script est exécuté à plusieurs reprises 100 fois pour illustrer l'avantage en termes de performances du script compilé lorsqu'il est exécuté à plusieurs reprises.
public void run (String scriptText) lance ScriptException {
Script CompiledScript = compile(scriptText);
si (script == null) {
retour;
}
pour (int je = 0; je < 100; i++) {
script.eval();
}
}
7.4 Appels de méthodes dans les scripts Dans les scripts, les plus courantes et les plus pratiques sont les méthodes. Certains moteurs de script permettent aux utilisateurs d'appeler individuellement une méthode dans un script. Les moteurs de script qui prennent en charge cet appel de méthode peuvent implémenter l'interface javax.script.Invocable. Grâce à l'interface Invocable, vous pouvez appeler des méthodes de niveau supérieur dans les scripts et des méthodes membres dans les objets. Si la méthode de niveau supérieur dans le script ou la méthode membre dans l'objet implémente l'interface en Java, vous pouvez obtenir l'objet d'implémentation de l'interface Java correspondante dans le script via la méthode de l'interface Invocable. De cette manière, l'interface peut être définie dans le langage Java et implémentée dans le script. Les autres parties du programme qui utilisent l'interface ne savent pas que l'interface est implémentée par le script. Comme l'interface Compilable, l'implémentation par ScriptEngine de l'interface Invocable est également facultative.
Le code suivant appelle la méthode de niveau supérieur dans le script via la fonction Invocable de l'interface Invocable. Les paramètres lors de l'appel seront transmis à la méthode dans le script. Étant donné que le moteur de script JavaScript fourni avec JavaSE implémente l'interface Invocable, le jugement quant à savoir si le moteur implémente l'interface Invocalbe est omis ici. Un exemple d'appel de la méthode de niveau supérieur du script en Java :
//Exemple d'appel de méthodes membres d'un objet script en Java
7.5 Implémentation de l'interface Java dans le script
Dans certains moteurs de script, l'interface peut être définie dans le langage Java et l'implémentation de l'interface peut être écrite dans le script, de cette manière, les autres parties du programme ne peuvent interagir qu'avec l'interface Java et n'ont pas besoin de s'en soucier. comment l'interface est implémentée. Dans le code suivant, Greet est une interface définie en Java, qui contient une méthode getGreeting. Implémentez cette interface dans le script. Grâce à la méthode getInterface, vous pouvez obtenir l'objet de l'interface implémentée par le script et appeler les méthodes qu'il contient.
La syntaxe du langage de script étant simple et flexible, elle convient parfaitement aux utilisateurs n'ayant aucune ou peu d'expérience en programmation. Ces utilisateurs peuvent utiliser le langage de script pour personnaliser la logique métier et l'interface utilisateur du programme. La langue peut améliorer la facilité d'utilisation du programme. Un meilleur équilibre est atteint entre flexibilité et flexibilité. Par exemple, le langage de script Lua est largement utilisé dans le développement de jeux pour personnaliser le comportement interne et l’interface utilisateur du jeu.
8. Bien que l'API de réflexion apporte de la flexibilité aux programmes Java, elle entraîne également des coûts de performances supplémentaires. En raison du mécanisme d'implémentation de l'API de réflexion, pour la même opération, comme appeler une méthode, l'utilisation de l'API de réflexion pour l'implémenter dynamiquement est plus rapide. que de l'exécuter directement dans la source. La façon dont le code est écrit est probablement un à deux ordres de grandeur plus lente. Avec l'amélioration de la mise en œuvre de la machine virtuelle Java, les performances de l'API de réflexion ont été considérablement améliorées. Cependant, cet écart de performances existe objectivement. Par conséquent, dans certaines applications ayant des exigences de performances relativement élevées, les API de réflexion doivent être utilisées avec prudence.