什麼是互動式程式設計環境?重點詞互動,在這樣的程式設計環境中,你每輸入一行程式碼,環境都會給你一個反饋,這就是互動式的程式設計環境。這種程式設計環境並不太適合工程化的複雜性需求,但在一些快速驗證、簡單計算之類的場景下還是非常好用的。其實互動式程式設計環境在其他高階語言中很早就有了,而Java直到Java 9才正式推出了這樣的工具。
下面就來一起學習下,這個Java中的互動式程式設計環境JShell。
JShell快速入門
本期視訊:7分鐘學會如何使用Java的互動式程式設計環境jshell
啟動JShell
開啟終端,然後執行命令:jshell
,執行效果如下:
➜ ~ jshell
| 歡迎使用 JShell -- 版本 9
| 要大致瞭解該版本, 請鍵入: /help intro
jshell>
執行計算
在jshell中可以快速的執行計算操作並獲得結果,比如這樣:
jshell> 1+2
$1 ==> 3
定義變數
在jshell中也可以定義變數與函式,比如,你可以這樣定義變數,並進行計算:
jshell> int a=1, b=2;
a ==> 1
b ==> 2
jshell> int c = a + b
c ==> 3
定義函式
在jshell中也可以函式來封裝操作,比如下面就是一個定義求和函式並呼叫它的例子:
jshell> int sum(int a, int b){
...> return a + b;
...> }
| 已建立 方法 sum(int,int)
jshell> int c = sum(1, 2)
c ==> 3
定義類
在jshell中,定義一些簡單的類,也是可以實現的,比如:
jshell> public class Calculate {
...>
...> public int a;
...> public int b;
...>
...> public int sum() {
...> return a + b;
...> }
...> }
| 已建立 類 Calculate
jshell> Calculate c = new Calculate();
c ==> Calculate@4fca772d
jshell> c.a = 1
$9 ==> 1
jshell> c.b = 2
$10 ==> 2
jshell> c.sum()
$11 ==> 3
當然了,這種場景其實就已經比較複雜了,這裡其實搭配Java 16中新增的record來實現的話,會簡單實用一些。
本文收錄在了我正在連載的《Java新特性專欄》,該系列該用電子書的方式編寫,如果想要沉浸式閱讀學習的話,可以訪問Web版本:https://www.didispace.com/jav...
檢視命令:/help
關於jshell常用命令,我們可以通過/help
來檢視
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 [-all]
| 您鍵入的內容的歷史記錄
| /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 工具的簡介
| keys
| 類似 readline 的輸入編輯的說明
| id
| 片段 ID 以及如何使用它們的說明
| shortcuts
| 片段和命令輸入提示, 資訊訪問以及
| 自動程式碼生成的按鍵說明
| context
| /env /reload 和 /reset 的評估上下文選項的說明
| rerun
| 重新評估以前輸入片段的方法的說明
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 [-all]
| 您鍵入的內容的歷史記錄
| /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 工具的簡介
| keys
| 類似 readline 的輸入編輯的說明
| id
| 片段 ID 以及如何使用它們的說明
| shortcuts
| 片段和命令輸入提示, 資訊訪問以及
| 自動程式碼生成的按鍵說明
| context
| /env /reload 和 /reset 的評估上下文選項的說明
| rerun
| 重新評估以前輸入片段的方法的說明
檢視定義的函式:/methods
jshell> /methods
| int sum(int,int)
檢視定義的變數:/vars
jshell> /vars
| int $1 = 3
| int b = 2
| Calculate c = Calculate@4fca772d
| int $9 = 1
| int $10 = 2
| int $11 = 3
| int $13 = 3
列出輸入源條目:/list
執行後,可以看到之前在jshell
中輸入的內容清單:
jshell> /list
1 : 1+2
3 : int a=1, b=2;
5 : int sum(int a, int b){
return a + b;
}
7 : public class Calculate {
public int a;
public int b;
public int sum() {
return a + b;
}
}
8 : Calculate c = new Calculate();
9 : c.a = 1
10 : c.b = 2
11 : c.sum()
12 : Map a = new HashMap();
左側的數字為條目id,可以利用該id,進行編輯和刪除操作
編輯源條目:/edit
上面通過/list
列出了輸入的條目資訊,下面試試通過/edit
編輯下,比如:
jshell> /edit 7
此時會彈出修改框:
修改完成後,點選accept即可
刪除源條目:/drop
/drop
命令可以用來刪除某個源條目,比如我們可以用下面的命令刪除id為12的那行Map a = new HashMap();
jshell> /drop 12
| 已刪除 變數 a
可以看到,執行後,也給出了提示:定義的Map型別的a變數刪除了。
儲存檔案:/save
如果想把這次編輯的內容儲存下來,以便到其他環境執行,或者下次繼續使用的話,可以通過/save
來儲存到檔案裡,比如這樣:
jshell> /save aaa.txt
開啟檔案:/open
當我們換了一個jshell環境後,可以通過開啟之前儲存的檔案來快速還原之前的執行內容,比如:
jshell> /open aaa.txt
重置jshell:/reset
當我們要換一個內容編寫的時候,需要清空之前執行的條目(清空/list的內容),這個時候就可以這樣來實現:
jshell> /reset
| 正在重置狀態。
檢視引入的包:/imports
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.*
檢視定義的類:/types
jshell> /types
| class Calculate
退出jshell:/exit
jshell> /exit
| Goodbye
好了,今天的分享就到這裡!如果您學習過程中如遇困難?可以加入我們超高質量的技術交流群,參與交流與討論,更好的學習與進步!
另外,不要走開,關注我!持續更新Java新特性專欄!
歡迎關注我的公眾號:程式猿DD。第一時間瞭解前沿行業訊息、分享深度技術乾貨、獲取優質學習資源