Java Language
JShell
Sök…
Introduktion
JShell är en interaktiv REPL för Java tillagd i JDK 9. Det gör det möjligt för utvecklare att omedelbart utvärdera uttryck, testklasser och experimentera med Java-språket. Tidig tillgång för jdk 9 kan erhållas från: http://jdk.java.net/9/
Syntax
- $ jshell - Starta JShell REPL
- jshell> / <command> - Kör ett givet JShell-kommando
- jshell> / exit - Avsluta JShell
- jshell> / help - Se en lista med JShell-kommandon
- jshell> <java_expression> - Utvärdera det givna Java-uttrycket (semikolon valfritt)
- jshell> / vars ELLER / metoder ELLER / typer - Se en lista över variabler, metoder eller klasser, respektive.
- jshell> / open <fil> - läs en fil som inmatning till skalet
- jshell> / edit <identifier> - redigera ett utdrag i setredigeraren
- jshell> / set editor <command> - ställ in kommandot som ska användas för att redigera utdrag med / edit
- jshell> / släpp <identifierare> - ta bort ett kodavsnitt
- jshell> / reset - Återställ JVM och radera alla utdrag
Anmärkningar
JShell kräver Java 9 JDK, som för närvarande (mars 2017) kan laddas ner som snapshots för tidig åtkomst från jdk9.java.net . Om du försöker köra jshell
kommandot får du ett fel som börjar med Unable to locate an executable
, se till att JAVA_HOME
är korrekt inställd.
Standardimport
Följande paket importeras automatiskt när JShell startar:
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.*
Gå in och lämna JShell
Starta JShell
Innan du försöker starta JShell, se till att din JAVA_HOME
miljövariabel pekar på en JDK 9-installation. Starta JShell genom att köra följande kommando:
$ jshell
Om allt går bra, bör du se en jshell>
prompt.
Avsluta JShell
För att lämna JShell, kör följande kommando från JShell-prompten:
jshell> /exit
uttryck
Inom JShell kan du utvärdera Java-uttryck, med eller utan semikolon. Dessa kan variera från grundläggande uttryck och uttalanden till mer komplexa:
jshell> 4+2
jshell> System.out.printf("I am %d years old.\n", 421)
Loops och balsam är också bra:
jshell> for (int i = 0; i<3; i++) {
...> System.out.println(i);
...> }
Det är viktigt att notera att uttryck inom block måste ha semikolon!
variabler
Du kan deklarera lokala variabler inom JShell:
jshell> String s = "hi"
jshell> int i = s.length
Tänk på att variabler kan omklassificeras med olika typer; detta är helt giltigt i JShell:
jshell> String var = "hi"
jshell> int var = 3
För att se en lista med variabler, ange /vars
vid JShell-prompten.
Metoder och klasser
Du kan definiera metoder och klasser inom JShell:
jshell> void speak() {
...> System.out.println("hello");
...> }
jshell> class MyClass {
...> void doNothing() {}
...> }
Inga åtkomstmodifierare är nödvändiga. Som med andra block krävs semikolon inuti metodkropparna. Tänk på att det, liksom med variabler, är möjligt att omdefiniera metoder och klasser. För att se en lista med metoder eller klasser, ange /methods
eller /types
vid JShell-prompten.
Redigera utdrag
Den grundläggande kodenheten som används av JShell är kodstycket eller källposten . Varje gång du förklarar en lokal variabel eller definierar en lokal metod eller klass, skapar du ett kodavsnitt vars namn är variabeln / metoden / klassens identifierare. När som helst kan du redigera ett fragment som du har skapat med kommandot /edit
. Låt oss till exempel säga att jag har skapat klassen Foo
med en enda metod, bar
:
jshell> class Foo {
...> void bar() {
...> }
...> }
Nu vill jag fylla i kroppen på min metod. I stället för att skriva över hela klassen kan jag redigera den:
jshell> /edit Foo
Som standard kommer en swingeditor att dyka upp med de mest grundläggande funktionerna som möjligt. Du kan dock ändra redigeraren som JShell använder:
jshell> /set editor emacs
jshell> /set editor vi
jshell> /set editor nano
jshell> /set editor -default
Observera att om den nya versionen av kodavsnittet innehåller syntaxfel kanske det inte sparas. På samma sätt skapas en kodbit bara om den ursprungliga deklarationen / definitionen är syntaktiskt korrekt; följande fungerar inte:
jshell> String st = String 3
//error omitted
jshell> /edit st
| No such snippet: st
Snippets kan emellertid sammanställas och därmed redigeras trots vissa kompileringstidsfel, såsom felaktiga anpassade typer - följande verk:
jshell> int i = "hello"
//error omitted
jshell> /edit i
Slutligen kan utdrag tas bort med kommandot /drop
:
jshell> int i = 13
jshell> /drop i
jshell> System.out.println(i)
| Error:
| cannot find symbol
| symbol: variable i
| System.out.println(i)
|
För att ta bort alla utdrag och därmed återställa JVM: s tillstånd, använd \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
| ^