Java programming is not hard to learn, but proficiency in the language takes time, effort, and a lot of practice. JShell can significantly reduce the time required to learn many of the core features of the Java programming language.
As a prototyping tool, JShell makes it easy to write and develop a code snippet without having to compile and run a complete program to test it.
What is JShell?
Java 9 witnessed the introduction of JShell, and it persists with the latest releases. It is a read-evaluate-print-loop (REPL) tool that can be used to write and execute Java code, load code from a file, save code snippets, and more, all using a simple command-line interface.
Learning Java using JShell
Learning Java using JShell, by Christoph Tornau (Packt Publishing), is an excellent introduction to the Java programming language using JShell and is especially suited for beginners. While it does not cover all the formalities of writing a full Java application, it does cover the fundamentals of the language itself including:
- Data types: int, byte, double, float, String, char, and boolean.
- Variables: Declaring variables.
- Operators: Using logical, conditional, compound assignment and unary operators.
- If and If-Else statements
- Switch expressions: Note that switch expressions are a preview feature and are disabled by default. Run JShell with “–enable-preview” to enable switch expressions.
- Loops: While, Do-While, For, and ForEach
- Object-Oriented Programming
- Classes and Objects
Using JShell to teach the fundamentals of Java is a smart approach taken by Christoph. It eliminates the distractions of having to choose from a variety of editors or IDE’s (Interactive Development Environment) and provides a simple “clutter-free” means to focus on Java alone.
The video course is ideally suited for beginning Java programmers and serves as a soft introduction to using JShell with Java.
Interestingly, Learning Java using JShell does not spend much time covering many of the JShell commands and key combinations that make using it that much more effective. What follows is a brief introduction to JShell. I have also included some helpful links to additional articles and resources at the end of this post.
Java Version 9 or Later
To run JShell, you must have JDK9 or later installed on your computer. You can get the latest version of the JDK for your operating system from Oracle’s “Java SE Downloads” page.
You can check the installed version of Java by typing “java -version” at the command prompt in a terminal session as pictured below:
To run JShell on windows, start a terminal session by typing “cmd” in the search bar and click on the “Command Prompt – app.”
When the command prompt appears, type “jshell” and press enter. Some Java language features, such as switch expressions, are available in preview mode only and disabled by default. They can be enabled by typing “jshell –enable-preview” at the command prompt as pictured below:
For a brief introduction to JShell, type “/help intro” without the quotes as suggested when the jshell opens in the terminal. For a list of commands, type /help. Oracle’s Java Platform, Standard Edition Java Shell User’s Guide, provides an in-depth review of JShell’s core features.
You can set the feedback mode using the “/set feedback mode” command where the mode is replaced by either “verbose,” “normal,” “concise,” or “silent.” For example: “/set feedback silent” displays the absolute minimum amount of information. You can also use the /set command to create customized feedback and prompt settings.
For help on a specific command or subject, type /help followed by the command or subject of interest to you. For example, when you enter “/help /list” at the jshell prompt, the requested help information appears on the screen as pictured below:
The JShell commands available in version 12 as displayed on our system are as follows:
- /list [|-all|-start]
- list the source you have typed
- edit a source entry
- delete a source entry
- /save [-all|-history|-start]
- save snippet source to a file
- open a file as the input source
- /vars [|-all|-start]
- list the declared variables and their values
- /methods [|-all|-start]
- list the declared methods and their signatures
- /types [|-all|-start]
- list the type declarations
- list the imported items
- /exit 
- exit the jshell tool
- /env [-class-path ] [-module-path ] [-add-modules ] …
- view or change the evaluation context
- /reset [-class-path ] [-module-path ] [-add-modules ]…
- reset the Jshell tool
- /reload [-restore] [-quiet] [-class-path ] [-module-path ]…
- reset and replay relevant history — current or previous (-restore)
- /history [-all]
- history of what you have typed
- /help [|]
- get information about using the jshell tool
- /set editor|start|feedback|mode|prompt|truncation|format …
- set configuration information
- /? [|]
- get information about using the jshell tool
- same as /help
- rerun last snippet — see /help rerun
- rerun snippets by ID or ID range — see /help rerun
- rerun n-th previous snippet — see /help rerun
To learn more about a given subject, enter one of the subjects from the list below after the /help command. For example: /help intro
- intro: an introduction to the JShell tool.
- keys: a description of line editing support to navigate and edit snippets and commands.
- id: a description of snippet IDs and how to use them
- shortcuts: a description of keystrokes for snippet and command completion, information access, and automatic code generation
- context: description of the evaluation context options for /env /reload and /reset
- rerun: a description of ways to re-evaluate previously entered snippets
The “jshell>” prompt doesn’t offer help unless you ask for it. There is more to this seemingly “archaic” interface than first meets the eye. and it is worth taking the time to look further.
Why use JShell?
As a developer, it is convenient to test a snippet of code without having to formally compile and run it to see if it’s going to work. Working with APIs can also be a challenge. and JShell is a perfect environment to learn more about them.
JShell is even integrated into the JetBrains IntelliJ IDE so you can reap all the benefits and productivity gains it has to offer and makes knowing what JShell is and what it can do for you even more relevant.
Some seasoned Java programmers are not aware that JShell even exists. I can only stress the importance of staying current with updates when they occur as they usually introduce new features and ways to make writing code that much more efficient.
As I’ve said many times before, “There’s always a better way and more than one solution.” Learning Java using JShell by Christoph Tornau is yet another example of that.
Until Next Time – STAY lean!
Related Articles and Resources
- Learning Java using JShell (Video 3 hours, 5 minutes), by Christoph Tornau (Packt Publishing, published 11-Oct-2019). ISBN: 9781839212239.
- Java Platform, Standard Edition – Java Shell User’s Guide (Oracle.com)
- 10 things developers need to know about JShell, by Rahul Kumar (developers.redhat.com).
- JShell: A Comprehensive Guide to the Java REPL, by Dustin Schultz (infoq.com).
- JShell Tutorial, by Robert Field (cr.openjdk.java.net)
- Hands-on Java 10 Programming with JShell (Video 3 hours, 16 minutes), by Mohamed Taman (Packt Publishing, published 26-Jul-2018). ISBN: 9781787122901.
- Learn JShell with Java 9 – Step by Step (Video 1 hour, 33 minutes), by Ranga Karanam (Pack Publishing, published 23-Feb-2018). ISBN: 9781789137590.
- Java 9 with JShell, by Gaston C. Hillar, 408 pages (Packt Publishing, 28-Mar-2017), ISBN: 9781787282841.