Java Language
JShell
Recherche…
Introduction
JShell est un REPL interactif pour Java ajouté dans JDK 9. Il permet aux développeurs d’évaluer instantanément les expressions, les classes de test et d’expérimenter le langage Java. Un accès anticipé pour jdk 9 peut être obtenu à l'adresse suivante: http://jdk.java.net/9/
Syntaxe
- $ jshell - Démarrez le JShell REPL
- jshell> / <commande> - Exécuter une commande JShell donnée
- jshell> / exit - Quittez JShell
- jshell> / help - Voir une liste de commandes JShell
- jshell> <expression_java> - Evalue l'expression Java donnée (point-virgule facultatif)
- jshell> / vars OU / méthodes OR / types - Voir une liste de variables, méthodes ou classes, respectivement.
- jshell> / open <fichier> - lit un fichier en entrée du shell
- jshell> / edit <identifiant> - éditer un extrait dans l'éditeur de jeux
- jshell> / set editor <command> - définit la commande à utiliser pour éditer les extraits à l'aide de / edit
- jshell> / drop <identifier> - supprime un extrait
- jshell> / reset - Réinitialise la JVM et supprime tous les extraits
Remarques
JShell nécessite le JDK Java 9, qui peut actuellement (mars 2017) être téléchargé en tant que snapshots à accès anticipé à partir de jdk9.java.net . Si, lorsque vous essayez d'exécuter la commande jshell
, vous obtenez une erreur commençant par Unable to locate an executable
, assurez-vous que JAVA_HOME
est défini correctement.
Importations par défaut
Les packages suivants sont importés automatiquement lorsque JShell démarre:
import java.io.*
import java.math.*
import java.net.*
import java.nio.file.*
import java.util.*
import java.util.concurrent.*
import java.util.function.*
import java.util.prefs.*
import java.util.regex.*
import java.util.stream.*
Entrer et quitter JShell
Démarrer JShell
Avant d'essayer de démarrer JShell, assurez-vous que votre variable d'environnement JAVA_HOME
pointe vers une installation JDK 9. Pour démarrer JShell, exécutez la commande suivante:
$ jshell
Si tout se passe bien, vous devriez voir une invite jshell>
.
Quitter JShell
Pour quitter JShell, exécutez la commande suivante à partir de l'invite JShell:
jshell> /exit
Expressions
Dans JShell, vous pouvez évaluer les expressions Java, avec ou sans points-virgules. Celles-ci peuvent aller d'expressions de base et d'énoncés à des expressions plus complexes:
jshell> 4+2
jshell> System.out.printf("I am %d years old.\n", 421)
Les boucles et les conditionnels vont bien aussi:
jshell> for (int i = 0; i<3; i++) {
...> System.out.println(i);
...> }
Il est important de noter que les expressions dans les blocs doivent avoir des points-virgules!
Les variables
Vous pouvez déclarer des variables locales dans JShell:
jshell> String s = "hi"
jshell> int i = s.length
Gardez à l'esprit que les variables peuvent être redéclarées avec différents types; Ceci est parfaitement valable dans JShell:
jshell> String var = "hi"
jshell> int var = 3
Pour voir une liste de variables, entrez /vars
à l'invite JShell.
Méthodes et Classes
Vous pouvez définir des méthodes et des classes dans JShell:
jshell> void speak() {
...> System.out.println("hello");
...> }
jshell> class MyClass {
...> void doNothing() {}
...> }
Aucun modificateur d'accès n'est nécessaire. Comme pour les autres blocs, les points-virgules sont obligatoires dans les corps de méthode. Gardez à l'esprit que, comme pour les variables, il est possible de redéfinir les méthodes et les classes. Pour afficher une liste de méthodes ou de classes, entrez /methods
ou /types
à l'invite JShell, respectivement.
Editer les extraits
L'unité de code de base utilisée par JShell est l' extrait de code ou l' entrée source . Chaque fois que vous déclarez une variable locale ou définissez une méthode ou une classe locale, vous créez un fragment dont le nom est l'identificateur de la variable / méthode / classe. À tout moment, vous pouvez modifier un extrait que vous avez créé avec la commande /edit
. Par exemple, disons que j'ai créé la classe Foo
avec une seule méthode, bar
:
jshell> class Foo {
...> void bar() {
...> }
...> }
Maintenant, je veux remplir le corps de ma méthode. Plutôt que de réécrire la classe entière, je peux l’éditer:
jshell> /edit Foo
Par défaut, un éditeur de swing apparaîtra avec les fonctionnalités les plus élémentaires possibles. Cependant, vous pouvez changer l'éditeur que JShell utilise:
jshell> /set editor emacs
jshell> /set editor vi
jshell> /set editor nano
jshell> /set editor -default
Notez que si la nouvelle version de l'extrait de code contient des erreurs de syntaxe, il est possible qu'il ne soit pas enregistré. De même, un extrait de code est créé uniquement si la déclaration / définition d'origine est syntaxiquement correcte; ce qui suit ne fonctionne pas:
jshell> String st = String 3
//error omitted
jshell> /edit st
| No such snippet: st
Toutefois, les extraits peuvent être compilés et donc modifiables malgré certaines erreurs de compilation, telles que les types incompatibles - les travaux suivants:
jshell> int i = "hello"
//error omitted
jshell> /edit i
Enfin, les extraits peuvent être supprimés à l'aide de la commande /drop
:
jshell> int i = 13
jshell> /drop i
jshell> System.out.println(i)
| Error:
| cannot find symbol
| symbol: variable i
| System.out.println(i)
|
Pour supprimer tous les extraits de code, réinitialisant ainsi l’état de la machine virtuelle Java, utilisez \reset
:
jshell> int i = 2
jshell> String s = "hi"
jshell> /reset
| Resetting state.
jshell> i
| Error:
| cannot find symbol
| symbol: variable i
| i
| ^
jshell> s
| Error:
| cannot find symbol
| symbol: variable s
| s
| ^