Java Language
JShell
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
| ^