Java JShell tutorial

j143

Janardhan Pulivarthi

Posted on February 13, 2022

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
💖 💪 🙅 🚩
j143
Janardhan Pulivarthi

Posted on February 13, 2022

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

What was your win this week?
weeklyretro What was your win this week?

November 29, 2024

Where GitOps Meets ClickOps
devops Where GitOps Meets ClickOps

November 29, 2024

How to Use KitOps with MLflow
beginners How to Use KitOps with MLflow

November 29, 2024