Ricerca…


introduzione

JShell è un REPL interattivo per Java aggiunto in JDK 9. Consente agli sviluppatori di valutare istantaneamente espressioni, classi di test e sperimentare con il linguaggio Java. L'accesso anticipato per jdk 9 può essere ottenuto da: http://jdk.java.net/9/

Sintassi

  • $ jshell - Avvia il REPL di JShell
  • jshell> / <comando>: esegue un comando JShell specificato
  • jshell> / exit - Esci da JShell
  • jshell> / help - Visualizza un elenco di comandi di JShell
  • jshell> <java_expression> - Valuta la specifica espressione Java (punto e virgola opzionale)
  • jshell> / vars OR / metodi OR / types - Visualizza un elenco di variabili, metodi o classi, rispettivamente.
  • jshell> / open <file> - legge un file come input per la shell
  • jshell> / edit <identificatore> - modifica uno snippet nell'editor di set
  • jshell> / set editor <comando>: imposta il comando da utilizzare per modificare i frammenti usando / modifica
  • jshell> / drop <identificatore>: elimina uno snippet
  • jshell> / reset - Reimposta la JVM ed elimina tutti i frammenti

Osservazioni

JShell richiede Java JDK 9, che attualmente (marzo 2017) può essere scaricato come istantanee di accesso anticipato da jdk9.java.net . Se, quando tenti di eseguire il comando jshell , ricevi un errore che inizia con Unable to locate an executable , assicurati che JAVA_HOME sia impostato correttamente.

Importa predefinite

I seguenti pacchetti vengono importati automaticamente all'avvio di JShell:

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.*

Entrare e uscire da JShell

Avvio di JShell

Prima di provare ad avviare JShell, assicurati che la tua variabile di ambiente JAVA_HOME punti ad un'installazione di JDK 9. Per avviare JShell, eseguire il seguente comando:

$ jshell

Se tutto va bene, dovresti vedere un prompt di jshell> .

Chiusura di JShell

Per uscire da JShell, eseguire il seguente comando dal prompt di JShell:

jshell> /exit

espressioni

All'interno di JShell, puoi valutare le espressioni Java, con o senza punto e virgola. Questi possono variare da espressioni di base e dichiarazioni a quelli più complessi:

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

Anche i loop e i condizionali vanno bene:

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

È importante notare che le espressioni all'interno dei blocchi devono avere il punto e virgola!

variabili

È possibile dichiarare variabili locali all'interno di JShell:

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

Tieni presente che le variabili possono essere ridichiarate con tipi diversi; questo è perfettamente valido in JShell:

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

Per visualizzare un elenco di variabili, immettere /vars al prompt di JShell.

Metodi e classi

È possibile definire metodi e classi all'interno di JShell:

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

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

Non sono necessari modificatori di accesso. Come con altri blocchi, è richiesto il punto e virgola all'interno dei corpi del metodo. Tieni presente che, come per le variabili, è possibile ridefinire metodi e classi. Per visualizzare un elenco di metodi o classi, immettere /methods o /types al prompt di JShell, rispettivamente.

Frammenti di modifica

L'unità di base del codice utilizzata da JShell è lo snippet o la voce di origine . Ogni volta che dichiari una variabile locale o definisci un metodo o una classe locale, crei uno snippet il cui nome è l'identificatore della variabile / metodo / classe. In qualsiasi momento puoi modificare uno snippet che hai creato con il comando /edit . Ad esempio, supponiamo di aver creato la classe Foo con una sola bar , metodo:

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

Ora, voglio riempire il corpo del mio metodo. Invece di riscrivere l'intera classe, posso modificarlo:

jshell> /edit Foo

Per impostazione predefinita, un editor oscillante apparirà con le funzionalità di base possibili. Tuttavia è possibile modificare l'editor utilizzato da JShell:

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

Nota che se la nuova versione dello snippet contiene errori di sintassi, potrebbe non essere salvata. Allo stesso modo, uno snippet viene creato solo se la dichiarazione / definizione originale è sintatticamente corretta; il seguente non funziona:

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

Tuttavia, gli snippet possono essere compilati e quindi modificabili nonostante alcuni errori in fase di compilazione, come i tipi non corrispondenti: i seguenti lavori:

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

Infine, gli snippet possono essere cancellati usando il comando /drop :

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

Per eliminare tutti i frammenti, quindi resettare lo stato della JVM, usa \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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow