誰說原生java不能函數式編成!java
JShell(JAVA Shell tool)是用來學習java語言和代碼設計的一個交互式工具。JShell是一個Read-Evaluate-Print Loop (REPL)閱讀-鍵入-打印-循環系統(函數式編成),他能夠進行代碼聲明、輸入語句、輸入表達式 而後直接顯示結果。 而後這是一個命令行工具。shell
使用Jshell 你能夠對程序過程當中任意對象隨時查看打印結果,並且能夠根據實際狀況當即做出調整。windows
寫一個java 程序通常涉及到下面幾個步驟:session
1. 寫一個完整的程序 2. 編譯&修改編譯錯誤 3. 運行程序 4. 看下哪裏錯了 5. 修改代碼 6. 而後循環1->5 直到所有OK
Jshell能夠實驗你的代碼還能夠探索性的開發你的程序。你能夠隨意編寫代碼,提煉出一個精良方法,也能夠在jshell session裏邊試用一些不熟悉的API。 Jshell固然不能替代IDE啦,可是你能夠先把代碼在jshell裏邊試驗成功之後(由於這樣就不用重複上面那個重複編譯的循環)而後就能夠粘貼到你的IDE裏邊去用了。oracle
Jshell 包含在JDK9裏邊,因此必需要安裝JDK9。進入命令行(windows下是CMD),若是你沒有將$JAVA/bin
加入到系統PATH中,那麼你只能進入到$JAVA_HOME/bin
使用./jshell
進行啓動了ide
% jshell | Welcome to JShell -- Version 9 | For an introduction type: /help intro #這裏已經進入jshell了。 jshell>
詳情模式是方便你看到例子和教程同步,也就是能夠很方便獲得引導和錯誤反饋。當你已經很熟悉這個工具了,那你就能夠嘗試使用其餘正常的或者間接模式(其餘模式) 啓動詳情模式用 -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 #退出命令 | 再見