JShell ถูกนำมาใช้ใน Java 9 และเป็นเครื่องมือ command-line ที่ช่วยให้เราป้อนคำสั่ง อย่างง่าย นิพจน์ เมธอด และคลาสโดยไม่ต้องมีเมธอด main()
เมื่อเราป้อนโค้ดใน JShell โค้ดจะได้รับ unique ID ID นี้เริ่มที่ 1 และเพิ่มขึ้นสำหรับแต่ละคำสั่งที่ป้อนใน JShell สิ่งเดียวกันก็ถูกต้องสำหรับไลบรารีที่โหลดตอนเริ่มต้น สำหรับแต่ละ import จะมีการกำหนด unique ID เริ่มด้วย $1 และเพิ่มขึ้นสำหรับแต่ละโค้ดที่โหลด ($2, $3 ฯลฯ) มีคำสั่งภายในเพื่อแสดงรายการโค้ดที่โหลดและป้อนในช่วงเซสชัน ใช้คำสั่ง "/list"
/list
/list [ID]
/list [Code_Name]
/list -start
/list -all
- /list: คำสั่งนี้แสดงโค้ดที่ใช้งานอยู่ทั้งหมดที่ป้อนในเซสชันปัจจุบัน (ไม่รวมโค้ดที่โหลดตอน JShell เริ่ม)
- /list [ID]: คำสั่งนี้แสดงโค้ดต้นฉบับที่สอดคล้องกับ ID ที่ป้อน
- /list [Code_Name]: แสดงโค้ดต้นฉบับที่สอดคล้องกับชื่อที่ป้อน
- /list -start: คำสั่งนี้แสดงโค้ดทั้งหมดที่โหลดตอน JShell เริ่ม เมื่อเริ่มเซสชัน ทุก import ที่โหลดไว้ล่วงหน้าจะแสดง และอาจรวมโค้ดที่คุณต้องการโหลดล่วงหน้า (จุดนี้จะอธิบายในส่วนที่สาม บท Customizing the start of JShell)
- /list -all: คำสั่งนี้แสดงรายการโค้ด active, inactive, error และ preloaded ทั้งหมดที่ป้อนในช่วงเซสชัน JShell
ในตัวอย่างโค้ดด้านล่าง เราสามารถแสดงรายการ imports, expressions ทั้งหมดที่ป้อน โดยใช้คำสั่ง "/list -all"
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.* jshell> LocalDate localDate = LocalDate.of(2020, 04, 10) | Error: | cannot find symbol | symbol: class LocalDate | LocalDate localDate = LocalDate.of(2020, 04, 10); | ^-------^ | Error: | cannot find symbol | symbol: variable LocalDate | LocalDate localDate = LocalDate.of(2020, 04, 10); | ^-------^ jshell> int x = 10 x ==> 10 jshell> public enum Operate { ...> ADDITION, ...> DIVISION; ...> } | created enum Operate jshell> /list -all s1 : import java.io.*; s2 : import java.math.*; s3 : import java.net.*; s4 : import java.nio.file.*; s5 : import java.util.*; s6 : import java.util.concurrent.*; s7 : import java.util.function.*; s8 : import java.util.prefs.*; s9 : import java.util.regex.*; s10 : import java.util.stream.*; e1 : LocalDate localDate = LocalDate.of(2020, 04, 10); 1 : int x = 10; 2 : public enum Operate { ADDITION, DIVISION; }
ในตัวอย่างโค้ดด้านล่าง เราสามารถตั้งชื่อ ตัวแปร, เมธอด, หรือแม้แต่ type ด้วยชื่อเดียวกันได้ แล้วเราสามารถใช้คำสั่ง "/list" ที่แสดง occurrence ต่างๆ ของชื่อนี้พร้อมกับประเภทที่สอดคล้อง
jshell> int x = 10 x ==> 10 jshell> public int x(int y) { ...> return y; ...> } | created method x(int) jshell> public long x(long y, long z) { ...> return y + z; ...> } | created method x(long,long) jshell> /list x 1 : int x = 10; 2 : public int x(int y) { return y; } 3 : public long x(long y, long z) { return y + z; }