JShell в Java

Улучшение REPL - JEP222

Введение в JShell

Одно из предложений JEP (предложение по расширению JDK) JShell было представлено в JDK 9. JShell - это инструмент Java REPL (цикл чтения-оценки-печати), упрощающий изучение и тестирование кодов Java. JShell называется JEP222. Специально этот инструмент позволяет пользователю создавать прототипы и исследовать варианты кодирования с немедленными результатами и обратной связью, что действительно приятно и делает командную строку интерактивной формы Java. Этот инструмент можно использовать для оценки объявлений, операторов и некоторых выражений в Java.

Что такое REPL

REPL означает чтение-оценка-печать. Это интерактивная оболочка, в которую можно ввести команду и сразу же показать результаты и обратную связь. Используя такие инструменты, мы можем опробовать новые идеи и методы в быстром тестировании, не тратя время на написание целых тестовых классов. Кроме того, этот инструмент в основном предназначен для немедленной обратной связи и может иметь важное значение для языка программирования.

вспомогательные ссылки

  1. Спецификация API модуля JShell - ссылка
  2. Основная спецификация JShell API - ссылка
  3. Справочник по инструменту JShell - ссылка
  4. Справочные материалы по инструментам 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.

  1. ПО УМОЛЧАНИЮ - загрузить поведение по умолчанию
  2. JAVASE - импортировать все пакеты java SE по умолчанию в оболочку
  3. ПЕЧАТЬ - определите некоторые функции, такие как 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. Это очень полезный инструмент, который можно использовать по-разному.