JShell/Kulla項目是第一個官方的Java REPL (Read-Eval-Print-Loop的縮寫,即交互式編程環境),是一種命令行工具。它容許你無需編寫類或者方法來執行Java語句。它與Python的解釋器或其它本地支持REPL的JVM語言,如Scala和Groovy相似。在Java 9即將到來的的特性中,這絕對是更有趣的特性之一。java
下載安裝OpenJDK9,而後咱們就能夠在安裝目錄的bin文件夾下看到 jshell.exe ,若是你配置好了環境變量,那麼就能夠在命令行中使用了。shell
咱們並無聲明$1變量,可是Jshell默認將表達式的結果轉爲變量進行了存儲,因此咱們能夠直接使用改變量:編程
咱們執行:segmentfault
會將文件存儲到你的用戶文件目錄下(你也能夠指定完整的路徑)app
咱們來看看存儲的文件的內容:模塊化
1+1 1+1 2+2 $1 System.out.print($1)
其實就是簡單將你的輸入進行了保存工具
上面的包都是默認導入的包這樣咱們就能直接使用這些包中的類而無需本身聲明oop
JDK9將Jshell相關API封裝爲模塊(模塊相關知識能夠查看 模塊化簡單教程)方便使用。下面咱們經過代碼來學習一下相關的API:學習
package com.coderknock; import java.io.ByteArrayInputStream; import java.io.Console; import java.util.List; import jdk.jshell.*; import jdk.jshell.Snippet.Status; /** * 拿客 * www.coderknock.com * QQ羣:213732117 * 建立時間:2016年06月29日 * 描述:JShell */ public class JshellMain { public static void main(String[] args) { Console console = System.console(); //建立一個Jshell環境,以後會自動進行關閉 try (JShell js = JShell.create()) { //循環監聽輸出 do { System.out.print("請輸入一些Java代碼: "); String input = console.readLine(); if (input == null) { break; } //將輸入的指令轉化爲SnippetEvent對象 List<SnippetEvent> events = js.eval(input); for (SnippetEvent e : events) { StringBuilder sb = new StringBuilder(); if (e.causeSnippet() == null) { // 咱們有一個片斷建立的事件 switch (e.status()) {//根據代碼片斷的執行進行輸出 case VALID: sb.append("Successful "); break; case RECOVERABLE_DEFINED: sb.append("With unresolved references "); break; case RECOVERABLE_NOT_DEFINED: sb.append("Possibly reparable, failed "); break; case REJECTED: sb.append("Failed "); break; } if (e.previousStatus() == Status.NONEXISTENT) { sb.append("addition"); } else { sb.append("modification"); } sb.append(" of "); sb.append(e.snippet().source()); System.out.println(sb); if (e.value() != null) { System.out.printf("Value is: %s\n", e.value()); } System.out.flush(); } } } while (true); } System.out.println("\nGoodbye"); } }
進行編譯javac JshellMain.java -encoding UTF-8
運行結果:ui
當輸入錯誤的java代碼時:
執行for循環等:
本人的直播課程在 7 月份就要開始了,但願小夥伴們支持一下,如今報名有優惠噢