logo

JShell

JShell er et interaktivt verktøy som er nyttig for å lære Java, men også for rask testing av mindre kodebiter.

Vi viser her hvordan du kommer i gang med dette verktøyet. Nederst på siden finner du lenker til mer omfattende innføringer i JShell.

Starte og stoppe JShell

JShell følger med som del av JDK 9 (og seinere versjoner). Du finner programmet på bin-katalogen til JDK, samme sted som java og javac ligger. For enkel bruk av JShell bør du legge denne katalogen inn i PATH. Da kan du starte JShell som følger (der -v er valgfritt, men sørger for at JShell gir litt mer utfyllende beskjeder, v står for verbose):

jshell -v

Du får se en velkomstmelding, etterfulgt av en ledetekst:

jshell>

Dette betyr at JShell venter på en kommando fra deg. Prøv følgende:

jshell> /help intro

Det finnes en rekke kommandoer i JShell i tillegg til /help. Skriv /help uten intro etterpå for å se hele listen.

For å avslutte JShell:

jshell> /exit

Utskrift og importsetninger

Du kan skrive Java-setninger rett inn i JShell. For å skrive ut en melding:

jshell> System.out.println("Hei verden!");
Hei verden

For å slippe unna med en kortere utskriftssetning, slik det gjøres i boken, så støtter JShell (statiske) importsetninger:

jshell> import static java.lang.System.*;
jshell> out.println("Hei verden!");
Hei verden

Noen av pakkene i Java-biblioteket er allerede importert. For å se hvilke:

jshell> /import
|    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.*
|    import static java.lang.System.*

Variabler og uttrykk

Du kan deklarere og initiere variabler, gi variablene nye verdier og skrive ut verdiene deres. JShell gir et svar for hver enkelt setning. Svar som starter med | er en utfyllende forklaring som bare blir vist når JShell kjøres i "pratsomt" modus (startet med opsjon -v).

jshell> int x = 2;
x ==> 2
| created variable x : int
jshell> x = x+1;
x ==> 3
| assigned to x : int
jshell> out.println("x er " + x);
x er 3

Du kan få JShell til å regne ut uttrykk. Verdien til hvert nye uttrykk blir tatt vare på i en hjelpevariabel. Slike variabler får navn $1, $2, $3 osv. og kalles for "scratch-variabler".

jshell> 2+2
$1 ==> 4
| created scratch variable $1 : int
jshell> $1+10
$2 ==> 14
| created scratch variable $2 : int

Litt større kodebiter

Du kan ta i bruk alle byggeklossene til Java i JShell, som f.eks. valg, løkker, metoder, klasser og objekt. Vi nøyer oss med å vise hvordan man kan definere og kalle en metode for å beregne fakultetsfunksjonen:

jshell> int fak(int n) {
   ...>   int f = 1;
   ...>   while (n>1) {
   ...>     f = f*n;
   ...>     n++;
   ...>   }
   ...>   return f;
   ...> }
| created method fak(int)
jshell> fak(5)
$3 ==> 120
| created scratch variable $3 : int

Flere JShell-kommandoer

Hver setning og hvert uttrykk du skriver inn blir til en såkallt "snippet". Du kan få JShell til å skrive ut alle slike snippets:

jshell> /list

Hvis du har behov for å gjenta en tidligere snippet, kan du bruke oppoverpil på tastaturet for å bla deg bakover.

For å se hvilke variabler du har deklarert:

jshell> /vars

For å se hvilke metoder du har deklarert:

jshell> /methods

Mer om JShell

Java Shell User’s GuideJava 9 – Exploring the REPLJShell: A Comprehensive Guide to the Java REPLIntroduction to the first official Java REPL – JShell