JShell в Java
Улучшение REPL - JEP222
Введение в JShell
Одно из предложений JEP (предложение по расширению JDK) JShell было представлено в JDK 9. JShell - это инструмент Java REPL (цикл чтения-оценки-печати), упрощающий изучение и тестирование кодов Java. JShell называется JEP222. Специально этот инструмент позволяет пользователю создавать прототипы и исследовать варианты кодирования с немедленными результатами и обратной связью, что действительно приятно и делает командную строку интерактивной формы Java. Этот инструмент можно использовать для оценки объявлений, операторов и некоторых выражений в Java.
Что такое REPL
REPL означает чтение-оценка-печать. Это интерактивная оболочка, в которую можно ввести команду и сразу же показать результаты и обратную связь. Используя такие инструменты, мы можем опробовать новые идеи и методы в быстром тестировании, не тратя время на написание целых тестовых классов. Кроме того, этот инструмент в основном предназначен для немедленной обратной связи и может иметь важное значение для языка программирования.
вспомогательные ссылки
- Спецификация API модуля JShell - ссылка
- Основная спецификация JShell API - ссылка
- Справочник по инструменту JShell - ссылка
- Справочные материалы по инструментам Java Platform SE - ссылка
Запуск JShell
требования
JShell - стандартный компонент Java JDK 9. доступный на сайте Oracle. "Скачать"
После установки Java вы можете запустить JShell, просто выполнив команду оболочки в командной строке.
supun@supun-X556UV:~$ jshell
| Welcome to JShell — Version 9-internal
| For an introduction type: /help intro
Команды в JShell
Мы можем получить больше информации о JShell, используя команду / help intro в оболочке.
/ help → мы можем получить информацию о командах в JShell в виде списка.
перечисление переменных
Чтобы составить список переменных, мы можем использовать команду / vars.
-> int x =10 | Added variable x of type int with initial value 10 -> int y = 20 | Added variable y of type int with initial value 20 -> double z = 30.0 | Added variable z of type double with initial value 30.0 -> /vars | int x = 10 | int y = 20 | double z = 30.0 ->
методы листинга
перечисление методов как переменных возможно в JShell. Специально здесь будет перечислен специальный метод. по умолчанию компилятор добавляет printf (String, Object…) void.. при использовании этого метода весь вывод будет отображаться в оболочке.
-> void run(){ System.out.println("Dog is running");} | Added method run() -> void eat(){ System.out.println("Dog is eating");} | Added method eat() -> void bark(){ System.out.println("Dog is barking");} | Added method bark() -> /methods | printf (String,Object...)void | run ()void | eat ()void | bark ()void ->
список источников
Все источники, которые мы использовали в JShell, будут отображаться, когда мы воспользуемся этой командой / list.
-> /list 1 : void run(){ System.out.println(“Dog is running”);} 2 : void eat(){ System.out.println(“Dog is eating”);} 3 : void bark(){ System.out.println(“Dog is barking”);} ->
Как использовать JShell
Импорт по умолчанию
В jShell есть несколько импортируемых по умолчанию пакетов, таких как пакеты .util *, .io *, .math * и .net *. Вы можете добавить свой собственный пакет в любое время.
jshell> /imports
| import java.util.*
| import java.io.*
| import java.math.*
| import java.net.*
| import java.util.concurrent.*
| import java.util.prefs.*
| import java.util.regex.*
Простые выражения в JShell
Выражение в JShell очень просто. Вы можете применить любое допустимое выражение, и оно отобразит их результаты как значения, его тип и назначит его переменной.
-> 1+1 | Expression value is: 2 | assigned to temporary variable $1 of type int ->
** В JShell есть несколько параметров для загрузки скрипта при запуске, а также некоторые специальные предопределенные параметры. Они указываются с помощью -statupflags.
- ПО УМОЛЧАНИЮ - загрузить поведение по умолчанию
- JAVASE - импортировать все пакеты java SE по умолчанию в оболочку
- ПЕЧАТЬ - определите некоторые функции, такие как print, printf, println
Переменные в JShell
Мы можем объявлять переменные, давать им имена и присваивать им значение. Как только вы это сделаете, они будут видны в области видимости. например, здесь я добавил «hello world» в виде строки, и она автоматически назначит переменную строкового типа с именем $ 1. позже мы сможем распечатать значение, используя это имя переменной. особенно нам не нужны точки с запятой после выражения в JShell
supun@supun-X556UV:~$ jshell | Welcome to JShell -- Version 9-internal | For an introduction type: /help intro -> "hello world" | Expression value is: "hello world" | assigned to temporary variable $1 of type String -> $1 | Variable $1 of type String has value "hello world" -> System.out.println($1) hello world -> System.out.println("hello world") hello world -> String sampleString = $1 | Added variable sampleString of type String with initial value "hello world" -> System.out.println(sampleString) hello world ->
-> int x = 2 | Added variable x of type int with initial value 2 ->
Определение типов переменных
Когда мы запускаем JShell в режиме обратной связи, мы можем узнать обратную связь. он включает имя типа и все описания переменных. это очень полезно, когда мы пытаемся определить тип в выражении.
Методы в JShell
Вы также можете определить свои собственные методы в JShell, как мы кодируем в блокноте. не только определение методов, но и их можно изменить. например, здесь я добавил образец кода. Когда вы попробуете экспериментировать с кодом, вы можете обнаружить, что определение переменной, метода или класса не делает то, что вы хотите. сделать. Таким образом, определение легко изменить, добавив новое. Здесь он заменяет предыдущий на новый.
supun@supun-X556UV:~$ jshell | Welcome to JShell -- Version 9-internal | For an introduction type: /help intro -> void run(){ System.out.println("Dog is running");} | Added method run() -> run() Dog is running -> void run(){ System.out.println("Dog is running"); System.out.println("Cat is also running"); } | Modified method run() | Update overwrote method run() -> run() Dog is running Cat is also running ->
Класс в JShell
объявление класса в JShell несколько отличается. Фактически можно объявить целый класс в сеансе JShell. Это использует весь базовый синтаксис Java для объявления класса.
-> class Test{ >> private String name; >> public String getName(){ >> return this.name; >> } >> >> public void setName(String name){ >> this.name = name; >> } >> } | Added class Test -> Test testObject = new Test(); | Added variable testObject of type Test with initial value Test@1d057a39 -> testObject.setName("Supun"); -> testObject.get getClass() getName() -> testObject.getName(); | Expression value is: "Supun" | assigned to temporary variable $4 of type String
после объявления класса мы можем использовать его как захотим. например, мы можем создать объект / экземпляр, и мы можем использовать этот объект. Когда мы создаем объект, JShell дает обратную связь, включая значение объекта и его тип.
Вывод
В настоящее время большинство современных языков, таких как узел python, некоторые фреймворки и большинство инструментов, могут взаимодействовать с оболочкой. JShell - это последнее усовершенствование языка Java, предназначенное для изучения и тестирования фрагментов кода. JShell помогает оценивать выражения, написанные на Java. Это очень полезный инструмент, который можно использовать по-разному.