Java Language
JShell
Suche…
Einführung
JShell ist ein interaktives REPL für Java, das in JDK 9 hinzugefügt wurde. Entwickler können Ausdrücke sofort testen, Klassen testen und mit der Java-Sprache experimentieren. Ein früher Zugriff für jdk 9 ist erhältlich unter: http://jdk.java.net/9/
Syntax
- $ jshell - Starten Sie die JShell REPL
- jshell> / <command> - Führt einen angegebenen JShell-Befehl aus
- jshell> / exit - Beenden Sie JShell
- jshell> / help - Zeigt eine Liste der JShell-Befehle an
- jshell> <java_expression> - Den angegebenen Java-Ausdruck auswerten (optionales Semikolon)
- jshell> / vars OR / Methods OR / types - Zeigt eine Liste von Variablen, Methoden bzw. Klassen an.
- jshell> / open <file> - Liest eine Datei als Eingabe in die Shell
- jshell> / edit <Bezeichner> - Bearbeiten Sie ein Snippet im Set-Editor
- jshell> / set editor <Befehl> - Legt den Befehl fest, der zum Bearbeiten von Ausschnitten mit / edit verwendet wird
- jshell> / drop <Bezeichner> - Ein Snippet löschen
- jshell> / reset - Setzt die JVM zurück und löscht alle Snippets
Bemerkungen
JShell benötigt das Java 9 JDK, das aktuell (März 2017) als frühzeitiger Zugriff auf Snapshots von jdk9.java.net heruntergeladen werden kann . Wenn Sie beim Ausführen des jshell
einen Fehler erhalten, der mit der Fehlermeldung Unable to locate an executable
nicht JAVA_HOME
wird JAVA_HOME
wird, müssen Sie sicherstellen, dass JAVA_HOME
richtig eingestellt ist.
Standardimporte
Die folgenden Pakete werden beim Start von JShell automatisch importiert:
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.*
JShell eingeben und beenden
JShell wird gestartet
Stellen Sie vor dem Start von JShell sicher, dass die Umgebungsvariable JAVA_HOME
auf eine JDK 9-Installation verweist. Führen Sie den folgenden Befehl aus, um JShell zu starten:
$ jshell
Wenn alles gut geht, sollte eine jshell>
Eingabeaufforderung angezeigt werden.
Beenden von JShell
Führen Sie den folgenden Befehl an der JShell-Eingabeaufforderung aus, um JShell zu beenden:
jshell> /exit
Ausdrücke
In JShell können Sie Java-Ausdrücke mit oder ohne Semikolons auswerten. Diese können von grundlegenden Ausdrücken und Anweisungen bis zu komplexeren Ausdrücken reichen:
jshell> 4+2
jshell> System.out.printf("I am %d years old.\n", 421)
Loops und Bedingungen sind auch in Ordnung:
jshell> for (int i = 0; i<3; i++) {
...> System.out.println(i);
...> }
Beachten Sie, dass Ausdrücke in Blöcken Semikolons enthalten müssen!
Variablen
Sie können lokale Variablen in JShell deklarieren:
jshell> String s = "hi"
jshell> int i = s.length
Beachten Sie, dass Variablen mit unterschiedlichen Typen neu deklariert werden können. Dies gilt vollkommen für JShell:
jshell> String var = "hi"
jshell> int var = 3
Geben Sie /vars
an der JShell-Eingabeaufforderung ein, um eine Liste der Variablen anzuzeigen.
Methoden und Klassen
Sie können Methoden und Klassen in JShell definieren:
jshell> void speak() {
...> System.out.println("hello");
...> }
jshell> class MyClass {
...> void doNothing() {}
...> }
Es sind keine Zugriffsmodifizierer erforderlich. Wie bei anderen Blöcken sind Semikolons innerhalb von Methodenkörpern erforderlich. Beachten Sie, dass es wie bei Variablen möglich ist, Methoden und Klassen neu zu definieren. Um eine Liste der Methoden oder Klassen anzuzeigen, geben Sie /methods
method oder /types
an der JShell-Eingabeaufforderung ein.
Schnipsel bearbeiten
Die grundlegende Codeeinheit, die von JShell verwendet wird, ist das Snippet oder der Quelleneintrag . Jedes Mal, wenn Sie eine lokale Variable deklarieren oder eine lokale Methode oder Klasse definieren, erstellen Sie ein Snippet, dessen Name der Bezeichner der Variablen / Methode / Klasse ist. Sie können ein von Ihnen erstelltes Snippet jederzeit mit dem Befehl /edit
. Zum Beispiel, sagen wir mal ich die Klasse erstellt haben Foo
mit einem einzigen, Verfahren, bar
:
jshell> class Foo {
...> void bar() {
...> }
...> }
Nun möchte ich den Körper meiner Methode ausfüllen. Anstatt die gesamte Klasse neu zu schreiben, kann ich sie bearbeiten:
jshell> /edit Foo
Standardmäßig wird ein Swing-Editor mit den grundlegendsten Funktionen angezeigt. Sie können jedoch den von JShell verwendeten Editor ändern:
jshell> /set editor emacs
jshell> /set editor vi
jshell> /set editor nano
jshell> /set editor -default
Wenn die neue Version des Snippets Syntaxfehler enthält, wird sie möglicherweise nicht gespeichert. Ebenso wird ein Snippet nur erstellt, wenn die ursprüngliche Deklaration / Definition syntaktisch korrekt ist. Folgendes funktioniert nicht:
jshell> String st = String 3
//error omitted
jshell> /edit st
| No such snippet: st
Snippets können jedoch trotz bestimmter Fehler bei der Kompilierung, z. B. nicht übereinstimmenden Typen, kompiliert und somit bearbeitet werden. Dies funktioniert folgendermaßen:
jshell> int i = "hello"
//error omitted
jshell> /edit i
Schließlich können Ausschnitte mit dem Befehl /drop
gelöscht werden:
jshell> int i = 13
jshell> /drop i
jshell> System.out.println(i)
| Error:
| cannot find symbol
| symbol: variable i
| System.out.println(i)
|
Um alle Snippets zu löschen und dabei den Status der JVM zurückzusetzen, verwenden Sie \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
| ^