天天看點

JShell 詳解一、簡介二、為什麼使用 JShell三、參考示例

文章目錄

  • 一、簡介
  • 二、為什麼使用 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