DEV Community

Janardhan Pulivarthi
Janardhan Pulivarthi

Posted on • Edited on

Java JShell tutorial

JShell is helpful for exploratory programming for calculations, error checking, building gui on the fly.

1. Start

PS F:\> jshell | Welcome to JShell -- Version 11.0.14 | For an introduction type: /help intro 
Enter fullscreen mode Exit fullscreen mode
jshell> /help intro 
Enter fullscreen mode Exit fullscreen mode

2. variable assignment

jshell> int x = 8 x ==> 8 
Enter fullscreen mode Exit fullscreen mode

3. expression evaluation

jshell> x + x $2 ==> 16 jshell> y = 2* x | Error: | cannot find symbol | symbol: variable y | y = 2* x | ^ jshell> float y = 2 * x y ==> 16.0 jshell> x = 2 * y | Error: | incompatible types: possible lossy conversion from float to int | x = 2 * y | ^---^ jshell> System.out.println("Hello"); Hello 
Enter fullscreen mode Exit fullscreen mode

4. Definitions

jshell> String twice(String s) { ...> return s + s; ...> } | created method twice(String) jshell> twice("Ocean") $6 ==> "OceanOcean" jshell> String twice(String s) { ...> return "Twice: " + s; ...> } | modified method twice(String) jshell> twice("Forest"); $8 ==> "Twice: Forest" 
Enter fullscreen mode Exit fullscreen mode

and a more involved example

jshell> double volume(double radius) { ...> return 4.0 / 3.0 * PI * cube(radius); ...> } | created method volume(double), however, it cannot be invoked until variable PI, and method cube(double) are declared jshell> double PI = 3.14145926535 PI ==> 3.14145926535 jshell> volume(2) | attempted to call method volume(double) which cannot be invoked until method cube(double) is declared jshell> double cube(double x) {return x * x * x; } | created method cube(double) jshell> volume(2) $17 ==> 33.5088988304 jshell> BigDecimal PI = new BigDecimal("3.141592653589793238462643383") PI ==> 3.141592653589793238462643383 jshell> volume(2) | attempted to call method volume(double) which cannot be invoked until this error is corrected: | bad operand types for binary operator '*' | first type: double | second type: java.math.BigDecimal | return 4.0 / 3.0 * PI * cube(radius); | ^------------^ 
Enter fullscreen mode Exit fullscreen mode

5. Reassignment

jshell> String x x ==> null jshell> int x = 10 x ==> 10 jshell> String x x ==> null jshell> x x ==> null 
Enter fullscreen mode Exit fullscreen mode

6. Error checking

Find out the exceptions specific to an operation to be handled.

jshell> int divide(int x, int y) { ...> return x / y; ...> } | created method divide(int,int) jshell> divide(5,0) | Exception java.lang.ArithmeticException: / by zero | at divide (#20:2) | at (#21:1) jshell> System.identityHashCode(PI) $23 ==> 1987083830 
Enter fullscreen mode Exit fullscreen mode

7. Build GUI

Build a simple visible frame 300x200

jshell> JFrame frame = new JFrame("Demo") frame ==> javax.swing.JFrame[frame0,0,0,0x0,invalid,hidden, ... tPaneCheckingEnabled=true] jshell> frame.setSize(300, 200) jshell> frame.setVisible(true) jshell> Graphics graphic = frame.getGraphics() graphic ==> sun.java2d.SunGraphics2D[font=java.awt.Font[famil ... java.awt.SystemColor[i=9]] 
Enter fullscreen mode Exit fullscreen mode

8. Program data

List all the variables

jshell> /vars | int $2 = 16 | float y = 16.0 | String $6 = "OceanOcean" | String $8 = "Twice: Forest" | String x = null | double $15 = 0.0 | double $17 = 33.5088988304 | BigDecimal PI = 3.141592653589793238462643383 | int $23 = 1987083830 | JFrame frame = javax.swing.JFrame[frame0,0,0,300x200,hidden,layout=java.awt.BorderLayout,title=Demo,resizable,normal,defaultCloseOperation=HIDE_ON_CLOSE,rootPane=javax.swing.JRootPane[,8,31,284x161,layout=javax.swing.JRootPane$RootLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=16777673,maximumSize=,minimumSize=,preferredSize=],rootPaneCheckingEnabled=true] | Graphics graphic = sun.java2d.SunGraphics2D[font=java.awt.Font[family=Dialog,name=Dialog,style=plain,size=12],color=java.awt.SystemColor[i=9]] 
Enter fullscreen mode Exit fullscreen mode

List all the methods in the current JShell session.

jshell> /methods | String twice(String) | double volume(double) | which cannot be invoked until this error is corrected: | bad operand types for binary operator '*' | first type: double | second type: java.math.BigDecimal | return 4.0 / 3.0 * PI * cube(radius); | ^------------^ | double cube(double) | int divide(int,int) 
Enter fullscreen mode Exit fullscreen mode

9. Load libraries

Loading libraries with --class-path option.

PS F:\> jshell --class-path 'F:/Repo/sds/systemds/target' | Welcome to JShell -- Version 11.0.14 | For an introduction type: /help intro jshell> import org.apache.sysds.*; 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)