JShell Step by Step

Java 9 has added the following new features:

  1. Java 9 REPL (JShell)
  2. Factory methods for immutable List, Set, Map, and Map.Entry
  3. Private methods in Interfaces
  4. Java 9 module system
  5. Process API improvements
  6. Try with Resources improvement
  7. CompletableFuture API improvements
  8. Reactive Streams

I am going to explore JShell in this blog.

Steps to follow:

  1. Download Java 9 from scratch and install.
  2. Run the shell.
  3. Get help from Java 9’s REPL.
  4. Run a few calculations in JShell.
  5. Define a function and use it.

Step 1: Download Java 9

[anijhawa@anijhawa ~]$ java -version
java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+165)
Java HotSpot(TM) 64-Bit Server VM (build 9-ea+165, mixed mode)

Step 2: Run JShell

To connect jshell, type jshell in the terminal.

[anijhawa@anijhawa ~]$ jshell
| Welcome to JShell -- Version 9-ea
| For an introduction type: /help intro

Step 3: Get Help

  • Type /help on the terminal and get a list of things can do with JShell:
jshell> /help
| Type a Java language expression, statement, or declaration.
| Or type one of the following commands:
| /list [<name or id>|-all|-start]
| list the source you have typed
| /edit <name or id>
| edit a source entry referenced by name or id
| /drop <name or id>
| delete a source entry referenced by name or id
| /save [-all|-history|-start] <file>
| Save snippet source to a file.
| /open <file>
| open a file as source input
| /vars [<name or id>|-all|-start]
| list the declared variables and their values
| /methods [<name or id>|-all|-start]
| list the declared methods and their signatures
| /types [<name or id>|-all|-start]
| list the declared types
| /imports
| list the imported items
| /exit
| exit jshell
| /env [-class-path <path>] [-module-path <path>] [-add-modules <modules>] ...
| view or change the evaluation context
| /reset [-class-path <path>] [-module-path <path>] [-add-modules <modules>]...
| reset jshell
| /reload [-restore] [-quiet] [-class-path <path>] [-module-path <path>]...
| reset and replay relevant history -- current or previous (-restore)
| /history
| history of what you have typed
| /help [<command>|<subject>]
| get information about jshell
| /set editor|start|feedback|mode|prompt|truncation|format ...
| set jshell configuration information
| /? [<command>|<subject>]
| get information about jshell
| /!
| re-run last snippet
| /<id>
| re-run snippet by id
| /-<n>
| re-run n-th previous snippet
| For more information type '/help' followed by the name of a
| command or a subject.
| For example '/help /list' or '/help intro'.
| Subjects:
| intro
| an introduction to the jshell tool
| shortcuts
| a description of keystrokes for snippet and command completion,
| information access, and automatic code generation
| context
| the evaluation context options for /env /reload and /reset
  • From /help command one of interesting command/imports, please try this and see the by default imports below:
jshell> /imports 
| 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.*

Step 4: Do some basic calculations.

jshell> 2+2
$1 ==> 4

jshell> 4%7
$2 ==> 4

jshell> 14&3
$3 ==> 2

jshell> $2// we got variable number two!
$2 ==> 4

Step 5: Multiply Function Code

Let’s define a function that takes an int and square it, then let’s call it.

jshell> int squareThis(int i){return i*i;}
| created method squareThis(int)

jshell> squareThis(5)
$6 ==> 25

To build your Java EE Microservice visit WildFly Swarm and download the cheat sheet.