JShell
Tabela przedstawia podstawowe polecenia JShell.
Polecenie | Opis |
/help lub /? | Wyświetla listę poleceń JShell. |
/help intro | Wyświetla krótkie wprowadzenie do JShell. |
/help shortcuts | Wyświetla opisy kilku skrótów klawiaturowych JShell. |
/list | Domyślnie wyświetla listę poprawnych fragmentów wpisanych w aktualnej sesji. Aby wyświetlić wszystkie fragmenty, należy użyć polecenia /list -all. |
/! | Przywołuje i ponownie wykonuje ostatni fragment. |
/identyfikator | Przywołuje i ponownie wykonuje fragment o wskazanym identyfikatorze. |
/-n | Przywołuje i ponownie wykonuje wcześniejszy skrypt — przy n równym 1 to ostatni skrypt, przy n równym 2 przedostatni itd. |
/edit | Domyślnie otwiera okno JShell Edit Pad zawierające poprawne fragmenty wpisane w aktualnej sesji. |
/save | Zapisuje poprawne fragmenty aktualnej sesji do wskazanego pliku. |
/open | Otwiera wskazany plik z fragmentami, wczytuje je do aktualnej sesji i wykonuje jeden po drugim. |
/vars | Wyświetla aktualne zmienne sesji i odpowiadające im wartości. |
/methods | Wyświetla sygnatury metod zadeklarowanych w aktualnej sesji. |
/types | Wyświetla typy zadeklarowane w aktualnej sesji. |
/imports | Wyświetla deklaracje importu z aktualnej sesji. |
/exit | Kończy sesję JShell. |
/reset | Czyści aktualną sesję JShell, usuwając wszystkie fragmenty kodu. |
/reload | Ponownie wczytuje sesję JShell i wykonuje poprawne fragmenty |
/drop | Usuwa wskazany fragment z aktualnej sesji JShell |
/env | Dokonuje zmian w środowisku JShell, np. dodaje moduły i pakiety w celu ich użycia jako dodatkowych typów. |
/history | Wyświetla wszystko, co zostało wpisane w aktualnej sesji, w tym wszystkie fragmenty kodu (poprawne, niepoprawne i nadpisane) i polecenia JShell — polecenie /list wyświetla jedynie fragmenty kodu. |
/set | Ustawia różne opcje konfiguracyjne JShell, np. edytor wykorzystywany w odpowiedzi na polecenie /edit, tekst używany jako znak zachęty, importy stosowane w trakcie uruchamiania sesji itp. |
Uzyskiwanie pomocy
Dokumentacja JShell jest dostępna bezpośrednio z poziomu poleceń /help i /?. Polecenie /? to skrót dla polecenia /help. Aby uzyskać krótkie wprowadzenie do JShell, wpisz:
Aby otrzymać listę wszystkich poleceń JShell, wpisz:
Aby uzyskać informację o opcjach konkretnego polecenia, wpisz:
Na przykład:
wyświetli szczegółową dokumentację polecenia /list. Podobnie:
wyświetli szczegółowe informacje na temat opcji start polecenia /set. Aby otrzymać listę skrótów klawiaturowych, wpisz:
Polecenie /edit — dodatkowe funkcjonalności
Opisaliśmy we wcześniejszej części rozdziału wykorzystywanie polecenia /edit do wczytania i wyświetlenia w oknie JShell Edit Pad wszystkich skryptów, skryptu o określonym identyfikatorze lub skryptu dotyczącego konkretnej metody. Można wskazać identyfikator dowolnej zmiennej, metody lub deklaracji typu. Jeśli w aktualnej sesji została zdefiniowana klasa Account, poniższe polecenie wyświetli ją w oknie JShell Edit Pad:
Polecenie /reload
W momencie pisania tego tekstu nie jest możliwe użycie polecenia /identyfikator do wykonania zakresu wcześniejszych fragmentów. Istnieje jednak polecenie /reload, umożliwiające ponowne wykonanie wszystkich poprawnych fragmentów
aktualnej sesji. Przyjrzyjmy się sesji z punktów 25.3.9 i 25.3.10:
1 : 45
2 : 72
3 : if ($1 < $2) {
System.out.printf("%d < %d%n", $1, $2);
}
4 : if ($1 > $2) {
System.out.printf("%d > %d%n", $1, $2);
}
5 : $1 = 100;
6 : if ($1 > $2) {
System.out.printf("%d > %d%n", $1, $2);
}
jshell>
Poniższe polecenie powoduje przeładowanie sesji i wykonanie poszczególnych fragmentów:
| Restarting and restoring state.
-: 45
-: 72
-: if ($1 < $2) {
System.out.printf("%d < %d%n", $1, $2);
}
45 < 72
-: if ($1 > $2) {
System.out.printf("%d > %d%n", $1, $2);
}
-: $1 = 100
-: if ($1 > $2) {
System.out.printf("%d > %d%n", $1, $2);
}
100 > 72
jshell>
Każdy fragment poprzedzają znaki -:, a w przypadku instrukcji if informacje wynikowe (jeśli istnieją) są prezentowane od razu po instrukcji. Jeśli nie chcesz widzieć treści fragmentów w momencie ich ponownego wczytywania, użyj opcji -quiet polecenia /reload:
| Restarting and restoring state.
45 < 72
100 > 72
jshell>
W takiej sytuacji wyświetlany jest tylko wynik działania poleceń wyświetlających pewne informacje w konsoli. Aby zobaczyć pełną treść wykonanych fragmentów, użyj polecenia /list.
Polecenie /drop
Możemy usunąć fragment z aktualnej sesji poleceniem /drop, wskazując identyfikator fragmentu lub jego nazwę. Poniższy zapis sesji JShell deklaruje zmienną x i metodę cube, a następnie usuwa x za pomocą identyfikatora i usuwa cube za pomocą jej nazwy:
x ==> 10
jshell> int cube(int y) {return y * y * y;}
| created method cube(int)
jshell> /list
1 : int x = 10;
2 : int cube(int y) {return y * y * y;}
jshell> /drop 1
| dropped variable x
jshell> /drop cube
| dropped method cube(int)
jshell> /list
jshell>
Tryby informacji zwrotnej
JShell oferuje kilka trybów informacji zwrotnej, które określają, co zostanie wyświetlone po każdej interakcji. Aby zmienić tryb, użyj polecenia /set feedback:
gdzie tryb to wartość concise, normal (domyślnie), silent lub verbose. Wszystkie prezentowane wcześniej interakcje JShell wykorzystywały tryb normal. Tryb informacji zwrotnej verbose W poniższej sesji JShell stosujemy tryb verbose, który może przypaść do gustu początkującym programistom:
| Feedback mode: verbose
jshell> int x = 10
x ==> 10
| created variable x : int
jshell> int cube(int y) {return y * y * y;}
| created method cube(int)
jshell> cube(x)
$3 ==> 1000
| created scratch variable $3 : int
jshell> x = 5
x ==> 5
| assigned to x : int
jshell> cube(x)
$5 ==> 125
| created scratch variable $5 : int
jshell>
Zwróć uwagę na dodatkowe informacje zwrotne wskazujące, że:
- zmienna x została utworzona;
- zmienna $3 została utworzona przy pierwszym wywołaniu cube — JShell stosuje termin scratch variable dla niejawnych zmiennych;
- wartość typu int została przypisana do zmiennej x;
- zmienna niejawna $5 została utworzona w momencie drugiego wywołania metody cube.
Tryb informacji zwrotnej concise
Wykonaj polecenie /reset, ustaw tryb informacji zwrotnej na wartość concise
i powtórz te same polecenia:
jshell> int x = 10
jshell> int cube(int y) {return y * y * y;}
jshell> cube(x)
$3 ==> 1000
jshell> x = 5
jshell> cube(x)
$5 ==> 125
jshell>
W tym przypadku jedynymi wyświetlanymi informacjami zwrotnymi są wyniki wykonania metody cube. Gdyby wystąpił błąd, on również zostałby wyświetlony.
Tryb informacji zwrotnej silent
Wykonaj polecenie /reset, ustaw tryb informacji zwrotnej na wartość silent i powtórz te same polecenia:
-> int x = 10
-> int cube(int y) {return y * y * y;}
-> cube(x)
-> x = 5
-> cube(x)
-> /set feedback normal
| Feedback mode: normal
jshell>
W tym przypadku znakiem zachęty zamiast jshell> jest ->. Wyświetlane będą tylko informacje o błędach. Tryb ten bywa przydatny, gdy chcemy skopiować kod z pliku źródłowego Javy i wstawić go do JShell, ale nie chcemy otrzymywać informacji zwrotnej dla każdego wiersza.
Inne opcje JShell konfigurowalne za pomocą /set
Do tej pory przedstawiliśmy możliwości polecenia /set związane z konfiguracją zewnętrznego edytora i wyborem trybu informacji zwrotnych. Polecenie /set obsługuje jeszcze kilka innych opcji:
- /set mode
- /set prompt
- /set truncation
- /set format
Polecenie /set mode umożliwia zdefiniowanie własnego trybu informacji zwrotnej. Pozostałe trzy polecenia dotyczą jego konfiguracji. Ich pełny opis wykracza poza ramy tego rozdziału. Więcej informacji znajdziesz w pomocy JShell po wpisaniu
poszczególnych poleceń.
Modyfikacja procesu uruchamiania JShell
Wcześniej zaprezentowaliśmy zbiór popularnych pakietów importowanych w trakcie uruchamiania sesji JShell. Wykorzystując polecenie /set start:
posłużą do inicjalizacji sesji lub jej restartu poleceniami /reset i /reload. Można również usunąć kod startowy poleceniem:
lub powrócić do domyślnego zestawu instrukcji poleceniem:
Wszystkie trzy konfiguracje dotyczą tylko aktualnej sesji. Aby działały stale, użyj opcji -retain. Poniższe polecenie wskazuje, że wszystkie następne sesje JShell powinny przy inicjalizacji stosować następujący kod:
Aby przywrócić wartości domyślne dla przyszłych sesji, użyj polecenia: