文章首發于公衆号《程式員果果》
位址 :
https://mp.weixin.qq.com/s/saHBSTo4OjsIIqv_ixigjg
一、簡介
Java Shell工具是JDK1.9出現的工具, Java Shell工具(JShell)是一個用于學習Java程式設計語言和Java代碼原型的互動式工具。JShell是一個Read-Evaluate-Print循環(REPL),它在輸入時評估聲明,語句和表達式,并立即顯示結果。該工具從指令行運作。
二、為什麼要使用JShell ?
使用JShell,您可以一次輸入一個程式元素,立即檢視結果,并根據需要進行調整。
Java程式開發通常涉及以下過程:
- 寫一個完整的程式。
- 編譯它并修複任何錯誤。
- 運作程式。
- 弄清楚它有什麼問題。
- 編輯它。
- 重複這個過程。
JShell可幫助您在開發程式時嘗試代碼并輕松探索選項。您可以測試單個語句,嘗試不同的方法變體,并在JShell會話中試驗不熟悉的API。JShell不替換IDE。在開發程式時,将代碼粘貼到JShell中進行試用,然後将JShell中的工作代碼粘貼到程式編輯器或IDE中。
三、JShell的使用
1. 啟動和退出
使用JShell需要配置好java的環境變量。
啟動:
jshell
要以詳細模式啟動JShell,請使用以下-v選項:
jshell -v
退出:
/exit
2. 運作代碼片段
使用詳細選項啟動JShell以獲得最大可用回報量:
jshell -v
| 歡迎使用 JShell -- 版本 11.0.2
| 要大緻了解該版本, 請鍵入: /help intro
在提示符處輸入以下示例語句,并檢視顯示的輸出:
jshell> int x = 45
x ==> 45
| 已建立 變量 x : int
首先,顯示結果。将其讀作:變量x的值為45.因為您處于詳細模式,是以還會顯示所發生情況的描述。
注意:如果未輸入分号,則會自動将終止分号添加到完整代碼段的末尾。
當輸入的表達式沒有命名變量時,會建立一個臨時變量,以便稍後可以引用該值。以下示例顯示表達式和方法結果的臨時值。該示例還顯示了...> 在代碼段需要多行輸入完成時使用的continuation prompt():
jshell> String twice(String s) {
...> return s + s;
...> }
| 已建立 方法 twice(String)
jshell> twice("Oecan")
$4 ==> "OecanOecan"
| 已建立暫存變量 $4 : String
3. 改變定義
在試驗代碼時,您可能會發現變量,方法或類的定義沒有按照您希望的方式執行。通過輸入新的定義可以輕松更改定義,該定義将覆寫先前的定義。
要更改變量,方法或類的定義,隻需輸入新定義即可。例如,twice在定義該方法嘗試片段得到在下面的示例中的新定義:
jshell> String twice(String s) {
...> return "Twice: " + s;
...> }
| 已修改 方法 twice(String)
| 更新已覆寫 方法 twice(String)
jshell> twice("thing")
$6 ==> "Twice: thing"
| 已建立暫存變量 $6 : String
還可以改變變量的類型定義。以下示例顯示x從String更改int為:
jshell> int x = 45
x ==> 45
| 已建立 變量 x : int
jshell> String x
x ==> null
| 已替換 變量 x : String
| 更新已覆寫 變量 x : int
4. 檢視預設導入和使用自動補全功能
預設情況下,JShell提供了一些常用包的導入,我們可以使用 import 語句導入必要的包或是從指定的路徑的包,來運作我們的代碼片段。我們可以輸入以下指令列出所有導入的包:
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.*
5. 自動補全的功能
當我們想輸入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(
6. 列出到目前為止目前 session 裡所有有效的代碼片段
jshell> /list
2 : 2+2
4 : twice("Oecan")
5 : String twice(String s) {
return "Twice: " + s;
}
6 : twice("thing")
8 : String x;
7. 列出到目前為止目前 session 裡所有方法
jshell> /methods
| String twice(String)
8. 使用外部代碼編輯器來編寫 Java 代碼
現在,我想對twice方法做一些改動,如果這時有外部代碼編輯器的話,做起來會很容易。在 JShell 中可以啟用JShell Edit Pad 編輯器,需要輸入如下指令,來修改上面的方法:
代碼修改完成以後,先點選“Accept”按鈕,再點選“Exit”按鈕,則退出編輯器,在 JShell 指令行中提示方法已經修改。
9. 從外部加載源代碼
如果在外部已經有寫好的 Java 檔案,可以使用/open 指令導入到 JShell 環境中,例如現在有一個Test.java檔案:
void say(String name) {
System.out.println("hello " + name);
}
jshell> /open /Users/Documents/java11/Test.java
jshell> /methods
| String twice(String)
| void say(String)
jshell> say("zhangsan")
hello zhangsan
JShell工具的更多使用方法,請參照官方示例:
https://docs.oracle.com/javase/9/jshell/