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 月份就要开始了,但愿小伙伴们支持一下,如今报名有优惠噢