Java 9 JShell (Project REPL) Часть 1
Данная статья написана командой Vertex Academy. Это одна из статей из нашего Учебника по Java 9. Надеемся, что данная статья Вам будет полезна. Приятного прочтения!
1. Введение
Многие языки имеют в своем распоряжении интерактивную консоль, REPL (read-eval-print loop) в которой можно тестировать новый функционал, или же и вовсе писать полноценный код. В девятой версии Java обзавелась и своей консолью - JShell. Сегодня мы разберем основы работы с ней.
2. Простые выражения
Для запуска JShell нужно лишь написать в командной строке/терминале - jshell
1 2 3 4 5 |
$ jshell | Welcome to JShell -- Version 9.0.1 | For an introduction type: /help intro jshell> |
Далее можем делать все, что захотим
1 2 3 4 5 |
jshell> 5 + 5 $1 ==> 10 jshell> System.out.println("Hello JShell!") Hello JShell! |
3. Переменные
Из примера выше, видно что результат выражение 5+5 был записан в переменную $1. Это специальная переменная, созданная JShell-ом. К ней можно обратиться
1 2 |
jshell> $1 $1 ==> 10 |
И ее можно изменить, как и обычную переменную
1 2 |
jshell> $1 = 7 $1 ==> 7 |
Каждое новое выражение будет записываться в новую переменную в последовательности $1, $2, $3 ...
1 2 3 4 5 6 7 8 |
jshell> "this is pure " + "MAGIC" $2 ==> "this is pure MAGIC" jshell> false $3 ==> false jshell> 3.75 $4 ==> 3.75 |
Если хотим явно указать имя и тип переменной - пожалуйста:
1 2 3 4 5 |
jshell> int a = 12 a ==> 12 jshell> char c = 'r' c ==> 'r' |
Модификаторы видимости (private, default, protected, public) присутствуют, но они не имеют никакого эффекта, ибо всё запускается в том же контексте. Модификаторы final или static в JShell не работают, они просто игнорируются
1 2 3 4 5 6 |
jshell> private static final long l = 1001 | Warning: | Modifiers 'static' 'final' not permitted in top-level declarations, ignored | private static final long l = 1001; | ^------------------^ l ==> 1001 |
Т.е переменная ничем не будет отличатся от созданной обычным способом.
4. Методы
В JShell так же можно создавать методы верхнего уровня (top level method), их можно использовать внутри той же сессии. Методы будут работать как и статические методы (к ним можно обратиться просто по имени), за исключением того, что ключевое слово static можно упустить
1 2 3 4 5 6 7 |
jshell> long multiply(long a, long b){ ...> return a * b; ...> } | created method multiply(long,long) jshell> multiply(4,7) $5 ==> 28 |
Если мы хотим изменить логику метода, нужно лишь объявить его еще раз
1 2 3 4 5 6 7 8 |
jshell> long multiply(long a, long b){ ...> long result = a * b; ...> return result; ...> } | modified method multiply(long,long) jshell> multiply(2,3) $6 ==> 6 |
5. Классы
Да, в JShell можно даже создать класс. Делается это так же, как и в обычном Java приложении
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
jshell> class Agent { ...> private String alias; ...> ...> public Agent(String alias) { ...> this.alias = alias; ...> } ...> ...> public String toString() { ...> return "Agent{" + "alias='" + alias + '\'' + '}'; ...> } ...> } | created class Agent jshell> Agent smith = new Agent("Smith"); smith ==> Agent{alias='Smith'} |
Стоит отметить, что модификатор видимости private в этом случае сработает, и при попытке обращения к переменной alias мы получим ошибку
1 2 3 4 5 |
jshell> smith.alias | Error: | alias has private access in Agent | smith.alias | ^---------^ |
В следующей статье мы рассмотрим импорты классов, библиотек, команды и конфигурацию JShell. Спасибо, что были с нами 🙂
Есть возможность записаться на наши курсы по Java. Детальную информацию смотрите у нас на сайте.