1. введение
Эта статья посвящена jshell , интерактивной консоли REPL (Read-Evaluate-Print-Loop), которая поставляется в комплекте с JDK для предстоящего выпуска Java 9. Для тех, кто не знаком с этой концепцией, ОТВЕТ позволяет в интерактивном режиме запускать произвольные фрагменты кода и оценивать их результаты.
ОТВЕТ может быть полезен для таких вещей, как быстрая проверка жизнеспособности идеи или выяснение, например, форматированной строки для String или SimpleDateFormat .
2. Бег
Для начала нам нужно запустить REPL, что делается путем вызова:
$JAVA_HOME/bin/jshell
Если требуется более подробное сообщение из оболочки, можно использовать флаг -v :
$JAVA_HOME/bin/jshell -v
Как только он будет готов, нас встретит дружелюбное сообщение и знакомая подсказка в стиле Unix внизу.
3. Определение и вызов методов
Методы можно добавить, введя их подпись и тело:
jshell> void helloWorld() { System.out.println("Hello world");} | created method helloWorld()
Здесь мы определили вездесущий метод “привет, мир”. Он может быть вызван с помощью обычного синтаксиса Java:
jshell> helloWorld() Hello world
4. Переменные
Переменные могут быть определены с помощью обычного синтаксиса объявления Java:
jshell> int i = 0; i ==> 0 | created variable i : int jshell> String company = "Baeldung" company ==> "Baeldung" | created variable company : String jshell> Date date = new Date() date ==> Sun Feb 26 06:30:16 EST 2017 | created variable date : Date
Обратите внимание, что точки с запятой необязательны. Переменные также могут быть объявлены без инициализации:
jshell> File file file ==> null | created variable file : File
5. Выражения
Любое допустимое выражение Java принимается, и результат оценки будет показан. Если явного получателя результата не предусмотрено, будут созданы переменные “нуля”:
jshell> String.format("%d of bottles of beer", 100) $6 ==> "100 of bottles of beer" | created scratch variable $6 : String
ОТВЕТ здесь весьма полезен, сообщив нам, что он создал переменную scratch с именем $6 , значение которой равно “100 бутылок пива на стене”, а ее тип – String .
Также возможны многострочные выражения. Shell достаточно умен, чтобы знать, когда выражение является неполным, и предложит пользователю продолжить в новой строке:
jshell> int i = ...> 5; i ==> 5 | modified variable i : int | update overwrote variable i : int
Обратите внимание, как приглашение изменилось на …> , чтобы обозначить продолжение выражения.
6. Команды
Оболочка предоставляет довольно много мета-команд, которые не связаны с оценкой операторов Java. Все они начинаются с косой черты (/), которую следует отличать от обычных операций. Например, мы можем запросить список всех доступных команд, выдав /help или/?.
Давайте взглянем на некоторые из них.
6.1. Импорт
Чтобы перечислить все импортные операции, активные в текущем сеансе, мы можем использовать команду /import :
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.*
Как мы видим, оболочка начинается с того, что уже добавлено довольно много полезных импорта.
6.2. Списки
Работать в REPL не так просто, как иметь под рукой полнофункциональную IDE: легко забыть, какие переменные имеют какие значения, какие методы были определены и так далее. Для проверки состояния оболочки мы можем использовать /var , /методы , /список или /историю:
jshell> /var | int i = 0 | String company = "Baeldung" | Date date = Sun Feb 26 06:30:16 EST 2017 | File file = null | String $6 = "100 of bottles of beer on the wall" jshell> /methods | void helloWorld() jshell> /list 1 : void helloWorld() { System.out.println("Hello world");} 2 : int i = 0; 3 : String company = "Baeldung"; 4 : Date date = new Date(); 5 : File file; 6 : String.format("%d of bottles of beer on the wall", 100) jshell> /history void helloWorld() { System.out.println("Hello world");} int i = 0; String company = "Baeldung" Date date = new Date() File file String.format("%d of bottles of beer on the wall", 100) /var /methods /list /history
Разница между /list и /history заключается в том, что последний показывает команды в дополнение к выражениям.
6.3. Сохранение
Для сохранения истории выражений можно использовать команду /save :
jshell> /save repl.java
Это сохраняет нашу историю выражений в repl.java в том же каталоге, из которого мы запустили команду shell .
6.4. Загрузка
Чтобы загрузить ранее сохраненный файл, мы можем использовать команду /open :
jshell> /open repl.java
Загруженный сеанс затем можно проверить, выдав /var , /метод или /список .
6.5. Выход
Когда мы закончим работу, команда /exit может завершить работу оболочки:
jshell> /exit | Goodbye
До свидания jshell .
7. Заключение
В этой статье мы рассмотрели Java 9 REPL. Поскольку Java существует уже более 20 лет, возможно, она появилась немного поздно. Тем не менее, он должен оказаться еще одним ценным инструментом в нашем наборе инструментов Java.