Java Language
JShell
Поиск…
Вступление
JShell - это интерактивный REPL для Java, добавленный в JDK 9. Он позволяет разработчикам мгновенно оценивать выражения, тестировать классы и экспериментировать с языком Java. Ранний доступ для jdk 9 можно получить по адресу: http://jdk.java.net/9/
Синтаксис
- $ jshell - Запустите JShell REPL
- jshell> / <command> - Запустить заданную команду JShell
- jshell> / exit - Выход JShell
- jshell> / help - список команд JShell
- jshell> <java_expression> - Оценить данное выражение Java (точка с запятой необязательна)
- jshell> / vars OR / methods OR / types - См. список переменных, методов или классов, соответственно.
- jshell> / open <файл> - читать файл в качестве ввода в оболочку
- jshell> / edit <идентификатор> - отредактируйте фрагмент в заданном редакторе
- jshell> / set editor <command> - установить команду, которая будет использоваться для редактирования фрагментов с использованием / edit
- jshell> / drop <идентификатор> - удалить фрагмент
- jshell> / reset - Сбросить JVM и удалить все фрагменты
замечания
JShell требует Java 9 JDK, который в настоящее время (март 2017) можно загрузить как ранние снимки доступа из jdk9.java.net . Если при попытке запустить команду jshell
вы получите сообщение об ошибке, начинающееся с « Unable to locate an executable
, убедитесь, что JAVA_HOME
установлен правильно.
Импорт по умолчанию
Следующие пакеты автоматически импортируются при запуске 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.*
Вход и выход JShell
Запуск JShell
Прежде чем пытаться запустить JShell, убедитесь, что переменная окружения JAVA_HOME
указывает на установку JDK 9. Чтобы запустить JShell, выполните следующую команду:
$ jshell
Если все пойдет хорошо, вы увидите jshell>
.
Выход из JShell
Чтобы выйти из JShell, запустите следующую команду из приглашения JShell:
jshell> /exit
Выражения
В JShell вы можете оценивать выражения Java с запятой или без нее. Они могут варьироваться от базовых выражений и операторов до более сложных:
jshell> 4+2
jshell> System.out.printf("I am %d years old.\n", 421)
Петли и условные обозначения тоже прекрасны:
jshell> for (int i = 0; i<3; i++) {
...> System.out.println(i);
...> }
Важно отметить, что выражения внутри блоков должны иметь точки с запятой!
переменные
Вы можете объявлять локальные переменные в JShell:
jshell> String s = "hi"
jshell> int i = s.length
Имейте в виду, что переменные могут быть переоформлены разными типами; это совершенно справедливо в JShell:
jshell> String var = "hi"
jshell> int var = 3
Чтобы просмотреть список переменных, введите /vars
в приглашении JShell.
Методы и классы
Вы можете определить методы и классы в JShell:
jshell> void speak() {
...> System.out.println("hello");
...> }
jshell> class MyClass {
...> void doNothing() {}
...> }
Не требуется модификаторов доступа. Как и в других блоках, точки с запятой требуются внутри тел метода. Имейте в виду, что, как и в случае с переменными, можно переопределить методы и классы. Чтобы просмотреть список методов или классов, введите /methods
или /types
в приглашении JShell, соответственно.
Редактирование фрагментов
Основной единицей кода, используемой JShell, является фрагмент или исходная запись . Каждый раз, когда вы объявляете локальную переменную или определяете локальный метод или класс, вы создаете фрагмент, чье имя является идентификатором переменной / метода / класса. В любой момент вы можете отредактировать фрагмент, который вы создали с помощью команды /edit
. Например, допустим, я создал класс Foo
с помощью одного метода, bar
:
jshell> class Foo {
...> void bar() {
...> }
...> }
Теперь я хочу заполнить тело моего метода. Вместо того, чтобы переписывать весь класс, я могу его отредактировать:
jshell> /edit Foo
По умолчанию редактор swing появится с наиболее доступными функциями. Однако вы можете изменить редактор, который использует JShell:
jshell> /set editor emacs
jshell> /set editor vi
jshell> /set editor nano
jshell> /set editor -default
Обратите внимание, что если новая версия фрагмента содержит любые синтаксические ошибки, она может быть не сохранена. Аналогично, фрагмент создается только в том случае, если оригинальное объявление / определение является синтаксически правильным; следующее не работает:
jshell> String st = String 3
//error omitted
jshell> /edit st
| No such snippet: st
Тем не менее, фрагменты могут быть скомпилированы и, следовательно, доступны для редактирования, несмотря на некоторые ошибки времени компиляции, такие как несогласованные типы - следующие работы:
jshell> int i = "hello"
//error omitted
jshell> /edit i
Наконец, фрагменты могут быть удалены с помощью команды /drop
:
jshell> int i = 13
jshell> /drop i
jshell> System.out.println(i)
| Error:
| cannot find symbol
| symbol: variable i
| System.out.println(i)
|
Чтобы удалить все фрагменты, тем самым переиздав состояние JVM, используйте \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
| ^