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
|  ^


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow