Zoeken…


Invoering

JShell is een interactieve REPL voor Java toegevoegd in JDK 9. Hiermee kunnen ontwikkelaars uitdrukkingen, testklassen en experimenten met de Java-taal onmiddellijk evalueren. Vroege toegang voor jdk 9 is verkrijgbaar via: http://jdk.java.net/9/

Syntaxis

  • $ jshell - Start de JShell REPL
  • jshell> / <command> - Voer een gegeven JShell-opdracht uit
  • jshell> / exit - JShell afsluiten
  • jshell> / help - Bekijk een lijst met JShell-opdrachten
  • jshell> <java_expression> - Evalueer de gegeven Java-expressie (puntkomma optioneel)
  • jshell> / vars OF / methodes OR / types - Zie respectievelijk een lijst met variabelen, methoden of klassen.
  • jshell> / open <bestand> - lees een bestand als invoer voor de shell
  • jshell> / edit <identifier> - bewerk een fragment in de set-editor
  • jshell> / set editor <command> - stel de opdracht in om fragmenten te bewerken met / edit
  • jshell> / drop <identifier> - verwijder een fragment
  • jshell> / reset - Reset de JVM en verwijder alle fragmenten

Opmerkingen

JShell vereist de Java 9 JDK, die momenteel (maart 2017) kan worden gedownload als snapshots voor vroege toegang van jdk9.java.net . Als u bij het uitvoeren van de opdracht jshell een foutmelding krijgt die begint met Unable to locate an executable , controleer dan of JAVA_HOME correct is ingesteld.

Standaard invoer

De volgende pakketten worden automatisch geïmporteerd wanneer JShell start:

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 in- en afsluiten

JShell wordt gestart

Voordat u JShell probeert te starten, moet u ervoor zorgen dat uw omgevingsvariabele JAVA_HOME naar een JDK 9-installatie. Voer de volgende opdracht uit om JShell te starten:

$ jshell

Als alles goed gaat, zou je een jshell> prompt moeten zien.

JShell afsluiten

Voer de volgende opdracht uit vanaf de JShell-prompt om JShell af te sluiten:

jshell> /exit

Uitdrukkingen

Binnen JShell kunt u Java-expressies evalueren, met of zonder puntkomma's. Deze kunnen variëren van basisuitdrukkingen en verklaringen tot meer complexe:

jshell> 4+2
jshell> System.out.printf("I am %d years old.\n", 421)

Lussen en conditionals zijn ook prima:

jshell> for (int i = 0; i<3; i++) {
   ...> System.out.println(i);
   ...> }

Het is belangrijk op te merken dat uitdrukkingen binnen blokken puntkomma's moeten hebben!

Variabelen

U kunt binnen JShell lokale variabelen declareren:

jshell> String s = "hi"
jshell> int i = s.length

Houd er rekening mee dat variabelen opnieuw kunnen worden ingedeeld met verschillende typen; dit is volkomen geldig in JShell:

jshell> String var = "hi"
jshell> int var = 3

Voer /vars bij de JShell-prompt om een lijst met variabelen te zien.

Methoden en klassen

U kunt methoden en klassen binnen JShell definiëren:

jshell> void speak() {
   ...> System.out.println("hello");
   ...> }

jshell> class MyClass {
   ...> void doNothing() {}
   ...> }

Geen toegangsmodificaties nodig. Net als bij andere blokken, zijn puntkomma's vereist binnen methodelichamen. Houd er rekening mee dat het, net als bij variabelen, mogelijk is om methoden en klassen opnieuw te definiëren. Als u een lijst met methoden of klassen wilt zien, voert u respectievelijk /methods of /types bij de JShell-prompt.

Fragmenten bewerken

De basiseenheid van code die door JShell wordt gebruikt, is het fragment of bronvermelding . Telkens wanneer u een lokale variabele declareert of een lokale methode of klasse definieert, maakt u een fragment waarvan de naam het ID van de variabele / methode / klasse is. U kunt op elk gewenst moment een fragment bewerken dat u hebt gemaakt met de opdracht /edit . Laten we bijvoorbeeld zeggen dat ik de klasse Foo heb gemaakt met een enkele, methode, bar :

jshell> class Foo {
   ...> void bar() {
   ...> }
   ...> }

Nu wil ik de kern van mijn methode invullen. In plaats van de hele klas te herschrijven, kan ik het bewerken:

jshell> /edit Foo

Standaard verschijnt een swing-editor met de meest elementaire functies die mogelijk zijn. U kunt echter de editor wijzigen die JShell gebruikt:

jshell> /set editor emacs
jshell> /set editor vi
jshell> /set editor nano
jshell> /set editor -default

Houd er rekening mee dat als de nieuwe versie van het fragment syntaxisfouten bevat, deze mogelijk niet wordt opgeslagen. Evenzo wordt een fragment alleen gemaakt als de oorspronkelijke verklaring / definitie syntactisch correct is; het volgende werkt niet:

jshell> String st = String 3
//error omitted
jshell> /edit st
|  No such snippet: st

Fragmenten kunnen echter worden gecompileerd en kunnen dus worden bewerkt ondanks bepaalde compilatie-tijdfouten, zoals niet-overeenkomende typen - het volgende werkt:

jshell> int i = "hello"
//error omitted
jshell> /edit i

Ten slotte kunnen fragmenten worden verwijderd met de opdracht /drop :

jshell> int i = 13
jshell> /drop i
jshell> System.out.println(i)
|  Error:
|  cannot find symbol
|    symbol:   variable i
|  System.out.println(i)
|

Gebruik \reset om alle fragmenten te verwijderen en daarmee de status van de JVM te \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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow