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
|  ^


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow