javascript
JShell 详解
文章目錄
- 一、簡(jiǎn)介
- 二、為什么使用 JShell
- 三、參考示例
- 啟動(dòng) JShell
- 退出 JShell
- 聲明定義基本類型的變量
- 聲明定義一個(gè)方法
- 覆蓋已存在的變量、方法、類的定義
- 查看 JShell 默認(rèn)導(dǎo)入的包
- 自動(dòng)補(bǔ)全功能
- 列出所有鍵入的源
- 列出已聲明方法及其簽名
- 加載外部的源代碼
- 查看 JShell 提供的所有指令
- 將你輸入的歷史代碼片段保存到文件中
一、簡(jiǎn)介
JShell(Java Shell)工具是 JDK1.9 出現(xiàn)的工具, JShell 是一個(gè)用于學(xué)習(xí) Java 編程語(yǔ)言和 Java 代碼原型的交互式工具。JShell 是交互式 REPL(Read-Evaluate-Print Loop,讀取-求值-輸出 循環(huán))工具。它在輸入時(shí)評(píng)估聲明,語(yǔ)句和表達(dá)式,并立即顯示結(jié)果。
可以在命令終端輸入下面的命令查看 JShell 簡(jiǎn)介:
jshell> /help intro | | intro | | 使用 jshell 工具可以執(zhí)行 Java 代碼, 從而立即獲取結(jié)果。 | 您可以輸入 Java 定義 (變量, 方法, 類, 等等), 例如: int x = 8 | 或 Java 表達(dá)式, 例如: x + x | 或 Java 語(yǔ)句或?qū)搿?| 這些小塊的 Java 代碼稱為 '片段'。 | | 這些 jshell 命令還可以讓您了解和 | 控制您正在執(zhí)行的操作, 例如: /list | | 有關(guān)命令的列表, 請(qǐng)執(zhí)行: /help簡(jiǎn)而言之,使用 JShell,你可以輸入代碼片段并馬上看到運(yùn)行結(jié)果,然后就可以根據(jù)需要作出調(diào)整。
二、為什么使用 JShell
使用JShell,您可以一次輸入一個(gè)程序元素,立即查看結(jié)果,并根據(jù)需要進(jìn)行調(diào)整。
Java程序開(kāi)發(fā)通常涉及以下過(guò)程:
編寫程序代碼
編譯程序
修復(fù)編譯錯(cuò)誤
編譯程序
運(yùn)行程序
重復(fù)以上過(guò)程…
JShell 可幫助您在開(kāi)發(fā)程序時(shí)嘗試代碼并輕松探索選項(xiàng)。您可以測(cè)試單個(gè)語(yǔ)句,嘗試不同的方法變體,并在 JShell 會(huì)話中試驗(yàn)不熟悉的API。JShell 不替換 IDE。在開(kāi)發(fā)程序時(shí),將代碼粘貼到 JShell 中進(jìn)行試用,然后將 JShell 中的工作代碼粘貼到程序編輯器或 IDE 中。
三、參考示例
啟動(dòng) JShell
liaowenxiongdeMacBook-Air:~ liaowenxiong$ jshell | 歡迎使用 JShell -- 版本 9.0.4 | 要大致了解該版本, 請(qǐng)鍵入: /help introjshell>退出 JShell
jshell> /exit | 再見(jiàn)聲明定義基本類型的變量
jshell> int x = 45 x ==> 45 | 已創(chuàng)建 變量 x : int聲明定義一個(gè)方法
jshell> String twice(String s) {...> return s + s;...> } | 已創(chuàng)建 方法 twice(String)jshell> twice("Oecan") $4 ==> "OecanOecan" | 已創(chuàng)建暫存變量 $4 : String注:直接調(diào)方法執(zhí)行,沒(méi)有指定變量接收,JShell 會(huì)自動(dòng)創(chuàng)建一個(gè)臨時(shí)變量接收返回值。
覆蓋已存在的變量、方法、類的定義
在試驗(yàn)代碼時(shí),您可能會(huì)發(fā)現(xiàn)變量,方法或類的定義沒(méi)有按照您希望的方式執(zhí)行。通過(guò)輸入新的定義可以輕松更改定義,該定義將覆蓋先前的定義。
例如,重新定義 twice() 方法:
jshell> String twice(String s) {...> return "Twice: " + s;...> } | 已修改 方法 twice(String) | 更新已覆蓋 方法 twice(String)jshell> twice("thing") $6 ==> "Twice: thing" | 已創(chuàng)建暫存變量 $6 : String例如,重新定義變量:
jshell> int x = 45 x ==> 45 | 已創(chuàng)建 變量 x : intjshell> String x x ==> null | 已替換 變量 x : String | 更新已覆蓋 變量 x : int查看 JShell 默認(rèn)導(dǎo)入的包
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.*自動(dòng)補(bǔ)全功能
當(dāng)我們想輸入 System 類時(shí),只需要輸入 Sys 然后按下 Tab 鍵,則自動(dòng)補(bǔ)全, 然后再輸入“.o”,則會(huì)自動(dòng)補(bǔ)全方法,在補(bǔ)全“System.out.”后再按下 Tab 鍵,就會(huì)列出當(dāng)前類的所有的 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(列出所有鍵入的源
列出到目前為止當(dāng)前 session 里所有有效的代碼片段:
jshell> /list 2 : 2+24 : twice("Oecan")5 : String twice(String s) {return "Twice: " + s;}6 : twice("thing")8 : String x;列出已聲明方法及其簽名
jshell> /methods | String twice(String)加載外部的源代碼
如果在外部已經(jīng)有寫好的 Java 文件,可以使用 /open 命令導(dǎo)入到 JShell 環(huán)境中,例如現(xiàn)在有一個(gè)Test.java 文件:
void say(String name) {System.out.println("hello " + name); }導(dǎo)入 JShell 進(jìn)程中:
jshell> /open /Users/Documents/java11/Test.java jshell> /methods # 查看已經(jīng)聲明定義的方法 | String twice(String) | void say(String)jshell> say("zhangsan") hello zhangsan查看 JShell 提供的所有指令
jshell> /help | 鍵入 Java 語(yǔ)言表達(dá)式, 語(yǔ)句或聲明。 | 或者鍵入以下命令之一: | /list [<名稱或 id>|-all|-start] | 列出您鍵入的源 | /edit <名稱或 id> | 編輯源條目 | /drop <名稱或 id> | 刪除源條目 | /save [-all|-history|-start] <文件> | 將片段源保存到文件 | /open <file> | 打開(kāi)文件作為源輸入 | /vars [<名稱或 id>|-all|-start] | 列出已聲明變量及其值 | /methods [<名稱或 id>|-all|-start] | 列出已聲明方法及其簽名 | /types [<名稱或 id>|-all|-start] | 列出類型聲明 | /imports | 列出導(dǎo)入的項(xiàng) | /exit [<integer-expression-snippet>] | 退出 jshell 工具 | /env [-class-path <路徑>] [-module-path <路徑>] [-add-modules <模塊>] ... | 查看或更改評(píng)估上下文 | /reset [-class-path <路徑>] [-module-path <路徑>] [-add-modules <模塊>]... | 重置 jshell 工具 | /reload [-restore] [-quiet] [-class-path <路徑>] [-module-path <路徑>]... | 重置和重放相關(guān)歷史記錄 -- 當(dāng)前歷史記錄或上一個(gè)歷史記錄 (-restore) | /history | 您鍵入的內(nèi)容的歷史記錄 | /help [<command>|<subject>] | 獲取有關(guān)使用 jshell 工具的信息 | /set editor|start|feedback|mode|prompt|truncation|format ... | 設(shè)置配置信息 | /? [<command>|<subject>] | 獲取有關(guān)使用 jshell 工具的信息 | /! | 重新運(yùn)行上一個(gè)片段 -- 請(qǐng)參閱 /help rerun | /<id> | 按 ID 或 ID 范圍重新運(yùn)行片段 -- 參見(jiàn) /help rerun | /-<n> | 重新運(yùn)行以前的第 n 個(gè)片段 -- 請(qǐng)參閱 /help rerun | | 有關(guān)詳細(xì)信息, 請(qǐng)鍵入 '/help', 后跟 | 命令或主題的名稱。 | 例如 '/help /list' 或 '/help intro'。主題: | | intro | jshell 工具的簡(jiǎn)介 | id | 片段 ID 以及如何使用它們的說(shuō)明 | shortcuts | 片段和命令輸入提示, 信息訪問(wèn)以及 | 自動(dòng)代碼生成的按鍵說(shuō)明 | context | /env /reload 和 /reset 的評(píng)估上下文選項(xiàng)的說(shuō)明 | rerun | 重新評(píng)估以前輸入片段的方法的說(shuō)明將你輸入的歷史代碼片段保存到文件中
保存指令 /save 的語(yǔ)法格式:/save [-all|-history|-start] <文件>。
jshell> /save -history /users/liaowenxiong/desktop/jshell.txt總結(jié)
- 上一篇: 电脑壁纸怎么换如何换电脑桌面壁纸
- 下一篇: Spring JDBC的学习