Поиск…


Вступление

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


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow