Java Language
JShell
Szukaj…
Wprowadzenie
JShell to interaktywna REPL dla Javy dodana w JDK 9. Umożliwia programistom natychmiastową ocenę wyrażeń, testowanie klas i eksperymentowanie z językiem Java. Wczesny dostęp do jdk 9 można uzyskać pod adresem : http://jdk.java.net/9/
Składnia
- $ jshell - Uruchom JShell REPL
- jshell> / <command> - Uruchom dane polecenie JShell
- jshell> / exit - Wyjdź z JShell
- jshell> / help - Zobacz listę poleceń JShell
- jshell> <wyrażenie_java> - Oceń dane wyrażenie Java (opcjonalnie średnik)
- jshell> / vars OR / Method OR / types - Zobacz odpowiednio listę zmiennych, metod lub klas.
- jshell> / open <plik> - czyta plik jako dane wejściowe do powłoki
- jshell> / edit <identyfikator> - edytuj fragment kodu w edytorze zestawów
- jshell> / set editor <command> - ustaw komendę używaną do edycji urywków za pomocą / edit
- jshell> / drop <identyfikator> - usuń fragment kodu
- jshell> / reset - Zresetuj JVM i usuń wszystkie fragmenty
Uwagi
JShell wymaga JDK Java 9, który można obecnie (marzec 2017 r.) Pobrać jako migawki wczesnego dostępu z jdk9.java.net . Jeśli podczas próby uruchomienia polecenia jshell
się błąd rozpoczynający się od Unable to locate an executable
, upewnij się, że JAVA_HOME
jest ustawiony poprawnie.
Domyślne importy
Następujące pakiety są importowane automatycznie po uruchomieniu 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.*
Wchodzenie i wychodzenie z JShell
Uruchamianie JShell
Przed próbą uruchomienia JShell upewnij się, że zmienna środowiskowa JAVA_HOME
wskazuje na instalację JDK 9. Aby uruchomić JShell, uruchom następujące polecenie:
$ jshell
Jeśli wszystko pójdzie dobrze, powinieneś zobaczyć komunikat jshell>
.
Wyjście z JShell
Aby wyjść z JShell, uruchom następujące polecenie w wierszu polecenia JShell:
jshell> /exit
Wyrażenia
W JShell możesz oceniać wyrażenia Java, z lub bez średników. Mogą to być zarówno podstawowe wyrażenia i instrukcje, jak i bardziej złożone:
jshell> 4+2
jshell> System.out.printf("I am %d years old.\n", 421)
Pętle i warunki warunkowe też są w porządku:
jshell> for (int i = 0; i<3; i++) {
...> System.out.println(i);
...> }
Należy zauważyć, że wyrażenia w blokach muszą mieć średniki!
Zmienne
Możesz zadeklarować zmienne lokalne w JShell:
jshell> String s = "hi"
jshell> int i = s.length
Należy pamiętać, że zmienne mogą być ponownie deklarowane z różnymi typami; jest to całkowicie poprawne w JShell:
jshell> String var = "hi"
jshell> int var = 3
Aby zobaczyć listę zmiennych, wpisz /vars
w wierszu polecenia JShell.
Metody i klasy
Możesz zdefiniować metody i klasy w JShell:
jshell> void speak() {
...> System.out.println("hello");
...> }
jshell> class MyClass {
...> void doNothing() {}
...> }
Nie są wymagane żadne modyfikatory dostępu. Podobnie jak w przypadku innych bloków, średniki są wymagane w ciałach metod. Należy pamiętać, że podobnie jak w przypadku zmiennych, możliwe jest przedefiniowanie metod i klas. Aby wyświetlić listę metod lub klas, wprowadź odpowiednio /methods
lub /types
w wierszu polecenia JShell.
Edycja fragmentów
Podstawową jednostką kodu używaną przez JShell jest fragment kodu lub wpis źródłowy . Za każdym razem, gdy deklarujesz zmienną lokalną lub definiujesz lokalną metodę lub klasę, tworzysz fragment kodu, którego nazwa jest identyfikatorem zmiennej / metody / klasy. W dowolnym momencie możesz edytować fragment utworzony za pomocą polecenia /edit
. Na przykład, powiedzmy, że stworzyliśmy klasę Foo
z jednym, metodzie bar
:
jshell> class Foo {
...> void bar() {
...> }
...> }
Teraz chcę wypełnić treść mojej metody. Zamiast przepisać całą klasę, mogę ją edytować:
jshell> /edit Foo
Domyślnie pojawi się edytor swing z najbardziej podstawowymi funkcjami. Możesz jednak zmienić edytor, którego używa JShell:
jshell> /set editor emacs
jshell> /set editor vi
jshell> /set editor nano
jshell> /set editor -default
Pamiętaj, że jeśli nowa wersja fragmentu zawiera błędy składniowe, może nie zostać zapisana. Podobnie fragment kodu jest tworzony tylko wtedy, gdy oryginalna deklaracja / definicja jest poprawna pod względem składniowym; następujące nie działa:
jshell> String st = String 3
//error omitted
jshell> /edit st
| No such snippet: st
Jednak fragmenty mogą być kompilowane, a zatem można je edytować pomimo pewnych błędów w czasie kompilacji, takich jak niedopasowane typy - następujące działania:
jshell> int i = "hello"
//error omitted
jshell> /edit i
Wreszcie fragmenty można usunąć za pomocą polecenia /drop
:
jshell> int i = 13
jshell> /drop i
jshell> System.out.println(i)
| Error:
| cannot find symbol
| symbol: variable i
| System.out.println(i)
|
Aby usunąć wszystkie fragmenty, resetując w ten sposób stan JVM, użyj \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
| ^