文章目錄
- 一、簡介
- 二、為什麼使用 JShell
- 三、參考示例
-
- 啟動 JShell
- 退出 JShell
- 聲明定義基本類型的變量
- 聲明定義一個方法
- 覆寫已存在的變量、方法、類的定義
- 檢視 JShell 預設導入的包
- 自動補全功能
- 列出所有鍵入的源
- 列出已聲明方法及其簽名
- 加載外部的源代碼
- 檢視 JShell 提供的所有指令
- 将你輸入的曆史代碼片段儲存到檔案中
一、簡介
JShell(Java Shell)工具是 JDK1.9 出現的工具, JShell 是一個用于學習 Java 程式設計語言和 Java 代碼原型的互動式工具。JShell 是互動式 REPL(Read-Evaluate-Print Loop,讀取-求值-輸出 循環)工具。它在輸入時評估聲明,語句和表達式,并立即顯示結果。
可以在指令終端輸入下面的指令檢視 JShell 簡介:
jshell> /help intro
|
| intro
|
| 使用 jshell 工具可以執行 Java 代碼, 進而立即擷取結果。
| 您可以輸入 Java 定義 (變量, 方法, 類, 等等), 例如: int x = 8
| 或 Java 表達式, 例如: x + x
| 或 Java 語句或導入。
| 這些小塊的 Java 代碼稱為 '片段'。
|
| 這些 jshell 指令還可以讓您了解和
| 控制您正在執行的操作, 例如: /list
|
| 有關指令的清單, 請執行: /help
簡而言之,使用 JShell,你可以輸入代碼片段并馬上看到運作結果,然後就可以根據需要作出調整。
二、為什麼使用 JShell
使用JShell,您可以一次輸入一個程式元素,立即檢視結果,并根據需要進行調整。
Java程式開發通常涉及以下過程:
編寫程式代碼
編譯程式
修複編譯錯誤
編譯程式
運作程式
重複以上過程…
JShell 可幫助您在開發程式時嘗試代碼并輕松探索選項。您可以測試單個語句,嘗試不同的方法變體,并在 JShell 會話中試驗不熟悉的API。JShell 不替換 IDE。在開發程式時,将代碼粘貼到 JShell 中進行試用,然後将 JShell 中的工作代碼粘貼到程式編輯器或 IDE 中。
三、參考示例
啟動 JShell
liaowenxiongdeMacBook-Air:~ liaowenxiong$ jshell
| 歡迎使用 JShell -- 版本 9.0.4
| 要大緻了解該版本, 請鍵入: /help intro
jshell>
退出 JShell
jshell> /exit
| 再見
聲明定義基本類型的變量
jshell> int x = 45
x ==> 45
| 已建立 變量 x : int
聲明定義一個方法
jshell> String twice(String s) {
...> return s + s;
...> }
| 已建立 方法 twice(String)
jshell> twice("Oecan")
$4 ==> "OecanOecan"
| 已建立暫存變量 $4 : String
注:直接調方法執行,沒有指定變量接收,JShell 會自動建立一個臨時變量接收傳回值。
覆寫已存在的變量、方法、類的定義
在試驗代碼時,您可能會發現變量,方法或類的定義沒有按照您希望的方式執行。通過輸入新的定義可以輕松更改定義,該定義将覆寫先前的定義。
例如,重新定義 twice() 方法:
jshell> String twice(String s) {
...> return "Twice: " + s;
...> }
| 已修改 方法 twice(String)
| 更新已覆寫 方法 twice(String)
jshell> twice("thing")
$6 ==> "Twice: thing"
| 已建立暫存變量 $6 : String
例如,重新定義變量:
jshell> int x = 45
x ==> 45
| 已建立 變量 x : int
jshell> String x
x ==> null
| 已替換 變量 x : String
| 更新已覆寫 變量 x : int
檢視 JShell 預設導入的包
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.*
自動補全功能
當我們想輸入 System 類時,隻需要輸入 Sys 然後按下 Tab 鍵,則自動補全, 然後再輸入“.o”,則會自動補全方法,在補全“System.out.”後再按下 Tab 鍵,就會列出目前類的所有的 public 方法:
jshell> System
簽名:
java.lang.System
<再次按 Tab 可檢視文檔>
jshell> System.out.
append( checkError() close() equals( flush() format( getClass()
hashCode() notify() notifyAll() print( printf( println( toString()
wait( write(
列出所有鍵入的源
列出到目前為止目前 session 裡所有有效的代碼片段:
jshell> /list
2 : 2+2
4 : twice("Oecan")
5 : String twice(String s) {
return "Twice: " + s;
}
6 : twice("thing")
8 : String x;
列出已聲明方法及其簽名
jshell> /methods
| String twice(String)
加載外部的源代碼
如果在外部已經有寫好的 Java 檔案,可以使用
/open
指令導入到 JShell 環境中,例如現在有一個
Test.java
檔案:
void say(String name) {
System.out.println("hello " + name);
}
導入 JShell 程序中:
jshell> /open /Users/Documents/java11/Test.java
jshell> /methods # 檢視已經聲明定義的方法
| String twice(String)
| void say(String)
jshell> say("zhangsan")
hello zhangsan
檢視 JShell 提供的所有指令
jshell> /help
| 鍵入 Java 語言表達式, 語句或聲明。
| 或者鍵入以下指令之一:
| /list [<名稱或 id>|-all|-start]
| 列出您鍵入的源
| /edit <名稱或 id>
| 編輯源條目
| /drop <名稱或 id>
| 删除源條目
| /save [-all|-history|-start] <檔案>
| 将片段源儲存到檔案
| /open <file>
| 打開檔案作為源輸入
| /vars [<名稱或 id>|-all|-start]
| 列出已聲明變量及其值
| /methods [<名稱或 id>|-all|-start]
| 列出已聲明方法及其簽名
| /types [<名稱或 id>|-all|-start]
| 列出類型聲明
| /imports
| 列出導入的項
| /exit [<integer-expression-snippet>]
| 退出 jshell 工具
| /env [-class-path <路徑>] [-module-path <路徑>] [-add-modules <子產品>] ...
| 檢視或更改評估上下文
| /reset [-class-path <路徑>] [-module-path <路徑>] [-add-modules <子產品>]...
| 重置 jshell 工具
| /reload [-restore] [-quiet] [-class-path <路徑>] [-module-path <路徑>]...
| 重置和重放相關曆史記錄 -- 目前曆史記錄或上一個曆史記錄 (-restore)
| /history
| 您鍵入的内容的曆史記錄
| /help [<command>|<subject>]
| 擷取有關使用 jshell 工具的資訊
| /set editor|start|feedback|mode|prompt|truncation|format ...
| 設定配置資訊
| /? [<command>|<subject>]
| 擷取有關使用 jshell 工具的資訊
| /!
| 重新運作上一個片段 -- 請參閱 /help rerun
| /<id>
| 按 ID 或 ID 範圍重新運作片段 -- 參見 /help rerun
| /-<n>
| 重新運作以前的第 n 個片段 -- 請參閱 /help rerun
|
| 有關詳細資訊, 請鍵入 '/help', 後跟
| 指令或主題的名稱。
| 例如 '/help /list' 或 '/help intro'。主題:
|
| intro
| jshell 工具的簡介
| id
| 片段 ID 以及如何使用它們的說明
| shortcuts
| 片段和指令輸入提示, 資訊通路以及
| 自動代碼生成的按鍵說明
| context
| /env /reload 和 /reset 的評估上下文選項的說明
| rerun
| 重新評估以前輸入片段的方法的說明
将你輸入的曆史代碼片段儲存到檔案中
儲存指令
/save
的文法格式:
/save [-all|-history|-start] <檔案>
。
jshell> /save -history /users/liaowenxiong/desktop/jshell.txt