- jshell介紹
誰說原生java不能函數式編成!
JShell(JAVA Shell tool)是用來學習java語言和代碼設計的一個交互式工具。JShell是一個Read-Evaluate-Print Loop (REPL)閱讀-鍵入-打印-循環系統(函數式編成),他可以進行代碼聲明、輸入語句、輸入表達式 然后直接顯示結果。 然后這是一個命令行工具。
- 為什么使用Jshell
使用Jshell 你可以對程序過程中任意對象隨時查看打印結果,而且可以根據實際情況立即作出調整。
寫一個java 程序一般涉及到下面幾個步驟:
1. 寫一個完整的程序
2. 編譯&修改編譯錯誤
3. 運行程序
4. 看下哪里錯了
5. 修改代碼
6. 然后循環1->5 直到全部OK
Jshell可以實驗你的代碼還可以探索性的開發你的程序。你可以隨意編寫代碼,提煉出一個精良方法,也可以在jshell session里邊試用一些不熟悉的API。
Jshell當然不能替代IDE啦,但是你可以先把代碼在jshell里邊試驗成功以后(因為這樣就不用重復上面那個重復編譯的循環)然后就可以粘貼到你的IDE里邊去用了。
- Jshell的啟動和停止
Jshell 包含在JDK9里邊,所以必須要安裝JDK9。進入命令行(windows下是CMD),如果你沒有將$JAVA/bin
加入到系統PATH中,那么你只能進入到$JAVA_HOME/bin
使用./jshell
進行啟動了
- Jshell啟動兩種模式
- 正常模式
% jshell
| Welcome to JShell -- Version 9
| For an introduction type: /help intro
#這里已經進入jshell了。
jshell>
- 詳情模式(-v)
詳情模式是方便你看到例子和教程同步,也就是可以很方便得到引導和錯誤反饋。當你已經很熟悉這個工具了,那你就可以嘗試使用其他正常的或者間接模式(其他模式)
啟動詳情模式用 -v 選項:
% jshell -v
To exit JShell, enter /exit:
jshell> /exit
| Goodbye
- 完整例子(功能演示)
leombp:~ Leo$ jshell -v
jshell> /help intro #查看系統大概的幫助
|
| intro
|
| 使用 jshell 工具可以執行 Java 代碼, 從而立即獲取結果。
| 您可以輸入 Java 定義 (變量, 方法, 類, 等等), 例如: int x = 8
| 或 Java 表達式, 例如: x + x
| 或 Java 語句或導入。
| 這些小塊的 Java 代碼稱為 '片段'。
|
| 這些 jshell 命令還可以讓您了解和
| 控制您正在執行的操作, 例如: /list
|
| 有關命令的列表, 請執行: /help
jshell> test # 測試下詳細模式的錯誤日志
| 錯誤:
| 找不到符號
| 符號: 變量 test
| 位置: 類
| test
| ^--^
jshell> 1+1 #可以很方便進行數字簡單計算
$1 ==> 2
| 已創建暫存變量 $1 : int
jshell> int a=10 #正常定義變量
a ==> 10
| 已創建 變量 a : int
jshell> String twice(String s){ #函數式定義方法
...> return s + s;
...> }
| 已創建 方法 twice(String)
jshell> twice( #調用方法,這里類似Linux 按tab鍵可以想IDE一樣進行提示。
twice(
jshell> twice("I Love This Game. ") #調用成功
$4 ==> "I Love This Game. I Love This Game. "
| 已創建暫存變量 $4 : String
jshell> $4 #返回系統自動聲明一個變量$4
$4 ==> "I Love This Game. I Love This Game. "
| $4 的值: String
jshell> int divide(int x,int y){ #定義一個方法進行異常測試
...> return x /y ;
...> }
| 已創建 方法 divide(int,int)
jshell> dived #按tab進行提示
jshell> divide(10,0) #異常
| java.lang.ArithmeticException thrown: / by zero
| at divide (#6:2)
| at (#7:1)
jshell> /list #查看用戶定義
1 : 1+1
2 : int a=10;
3 : String twice(String s){
return s + s;
}
4 : twice("I Love This Game. ")
5 : $4
6 : int divide(int x,int y){
return x /y ;
}
7 : divide(10,0)
jshell> "str". #測試下tab對對象的自動提示
charAt( chars() codePointAt(
codePointBefore( codePointCount( codePoints()
compareTo( compareToIgnoreCase( concat(
contains( contentEquals( endsWith(
equals( equalsIgnoreCase( getBytes(
getChars( getClass() hashCode()
indexOf( intern() isEmpty()
lastIndexOf( length() matches(
notify() notifyAll() offsetByCodePoints(
regionMatches( replace( replaceAll(
replaceFirst( split( startsWith(
subSequence( substring( toCharArray()
toLowerCase( toString() toUpperCase(
trim() wait(
#測試自動導入
#Shift + Tab + i后出現意外的字符。
#Mac下是 `tab + i` 進行自動導入。
jshell> new JFrame
0: 不執行任何操作
1: import: javax.swing.JFrame
選項: #我輸入了 1
Imported: javax.swing.JFrame
jshell> new JFrame
jshell> /exit #退出命令
| 再見