
JShell是什么?
引入JDK官方的Summary:
Provide an interactive tool to evaluate declarations, statements, and expressions of the Java programming language, together with an API so that other applications can leverage this functionality.
JShell是Java的REPL工具(Read-eval-print-loop):交互式解析器,一種命令行工具。它允許你無需使用類或者方法包裝來執(zhí)行Java語句。
像Python和Scala之類的語言早就有交互式編程環(huán)境REPL了,以交互式的方式對語句和表達(dá)式進(jìn)行求值。開發(fā)者只需要輸入一些代碼,就可以在編譯前獲得對程序的反饋。而之前的Java版本要想執(zhí)行代碼,必須創(chuàng)建文件、聲明類、提供測試方法方可實現(xiàn)。
JShell的理念
即寫即得,快速運行
JShell的目標(biāo)
- Java9中終于擁有了REPL工具:jShell。利用jShell在沒有創(chuàng)建類
的情況下直接聲明變量,計算表達(dá)式,執(zhí)行語句。即開發(fā)時可以
在命令行里直接運行java的代碼,而無需創(chuàng)建Java文件,無需跟
人解釋”public static void main(String[] args)”這句廢話。 - jShell也可以從文件中加載語句或者將語句保存到文件中。
- jShell也可以是tab鍵進(jìn)行自動補全和自動添加分號。
JShell使用舉例
-
進(jìn)入JShell:
進(jìn)入shell -
幫助:
幫助 -
基本使用:
基本使用 -
Java表達(dá)式
JShell終端還可以自己計算Java表達(dá)式。字符串連接、方法回調(diào)、算法,諸如此類
Java表達(dá)式 -
分號對于純語句是可選的:
分號對于純語句可選 -
導(dǎo)入指定的包
導(dǎo)入指定的包 向前引用
你在定義方法時可以引用其他方法或變量,且這些方法或變量僅會在一段時間后被定義-
Tab鍵自動補全代碼
Tab鍵自動補全代碼 -
REPL網(wǎng)絡(luò)
使用JShell時,我們不會受限于機器和網(wǎng)絡(luò)訪問,這帶來了一些有趣的機會。例如,想想把它當(dāng)做一個終端來與服務(wù)器交流,遠(yuǎn)程連接到服務(wù)器并且從外面控制一些參數(shù)。另一個選擇是查詢數(shù)據(jù)庫,這里真的是有無限可能。
REPL網(wǎng)絡(luò) -
保存和加載工作空間
-
列出當(dāng)前session中所有有效的代碼片段
代碼片段 -
列出當(dāng)前session中所有創(chuàng)建過的變量
創(chuàng)建過的變量 -
列出當(dāng)前session中所有創(chuàng)建過的方法
創(chuàng)建過的方法
-
使用外部編輯器來編寫java代碼
/edit add
- 從外部文件加載源代碼
/open xxx.java
-
沒有受檢異常/編譯時異常
沒有受檢異常
如果你一直擔(dān)心受檢異常會毀掉你的REPL經(jīng)歷,無需再擔(dān)心,JShell在后臺為你隱藏好了
- 退出shell
/exit
- JShell API
JShell除了可以作為單獨的JDK工具,還可以提供一個API,它能對外部調(diào)用開放所有的功能
- 在運行中修改定義
你可以重新聲明變量、方法或者類,而無需擔(dān)心原始的聲明。一旦你這樣操作了,就會收到一個信息提示你發(fā)生了什么,但除此之外一切照舊。
怎么樣?是不是心動了?趕緊試試吧~











