##转载请标明出处 http://coderknock.com ##什么是JShell?

JShell/Kulla项目是第一个官方的Java REPL (Read-Eval-Print-Loop的缩写,即交互式编程环境),是一种命令行工具。它允许你无需编写类或者方法来执行Java语句。它与Python的解释器或其它本地支持REPL的JVM语言,如Scala和Groovy类似。在Java 9即将到来的的特性中,这绝对是更有趣的特性之一。

##JShell的使用 ###命令行中直接使用 下载安装OpenJDK9,然后我们就可以在安装目录的bin文件夹下看到 jshell.exe ,如果你配置好了环境变量,那么就可以在命令行中使用了。

####我们来看下Jshell可以有什么设置选项:

####/list:用于查看你之前输入的语句的信息

####/vars:用于查看你之前输入的变量,如果你只是输入了一个表达式,Jshell会将计算结果保存为一个变量

我们并没有声明$1变量,但是Jshell默认将表达式的结果转为变量进行了存储,所以我们可以直接使用改变量:

####/save:存储之前的输入 我们执行:

会将文件存储到你的用户文件目录下(你也可以指定完整的路径) 我们来看看存储的文件的内容:

1+1

1+1

2+2

$1

System.out.print($1)

其实就是简单将你的输入进行了保存 ####/reset:重置,会清楚你之前输入的内容

####/open:打开一个文件并执行其中内容

####/methods:获取声明的或者使用到静态方法

####/types:显示接口、类、枚举等信息

####/imports:获取导入的包

上面的包都是默认导入的包这样我们就能直接使用这些包中的类而无需自己声明

####/exit:退出Jshell

####/reload:重置后重新加载之前的内容

####/classpath :这个用于你使用自己声明的类的时候可以将目录添加到classpath进行引用 ####/history:查看之前所有输入的命令

####/retain editor|start|feedback|mode 用于保存配置信息方便 别的环境中/set editor|start|feedback|mode来获得样的配置 ####/id:重新执行某个id的操作

####/-n:重新运行前面的第 n 个片段

###在代码中的使用 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 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 运行结果:

当输入错误的java代码时:

执行for循环等:

java jshell_Java9特性预览——Jshell相关推荐

  1. Flink 1.14 新特性预览

    简介: 一文了解 Flink 1.14 版本新特性及最新进展 本文由社区志愿者陈政羽整理,内容源自阿里巴巴技术专家宋辛童 (五藏) 在 8 月 7 日线上 Flink Meetup 分享的<Fl ...

  2. 【Flink】Flink Flink 1.14 新特性预览

    1.概述 转载:Flink 1.14 新特性预览 简介: 一文了解 Flink 1.14 版本新特性及最新进展 本文由社区志愿者陈政羽整理,内容源自阿里巴巴技术专家宋辛童 (五藏) 在 8 月 7 日 ...

  3. Apache Flink Meetup 8.7 深圳站,企业实践 + 1.14 新特性预览

    时隔 10 个月,Apache Flink Meetup 又来到了深圳这个与 Flink 契合度很高的城市.正如改革和创新是深圳的标签,Apache Flink 给技术开发者们带来的,也是摒弃旧的 & ...

  4. Java实现在线预览功能

    java实现在线预览功能,需要用到  jacob.dll jacob.jar   预览pdf所需js  pdfobject.min.js 将上传文件转为pdf保存. <divclass=&quo ...

  5. java实现文件预览(Office转PDF)

    一.首先下载安装openOffice软件,下载地址:http://www.openoffice.org/download/index.html 当然,下载速度特别慢,下面是百度网盘地址. 链接:htt ...

  6. java实现在线预览txt转pdf

    java实现在线预览txt转pdf 首先引入itext的jar包 <dependency><groupId>com.itextpdf</groupId><ar ...

  7. Silverlight 5 Beta 新特性预览

    MIX11大会昨天刚刚结束.第二天核心Session包含三个部分:Windows phone 7/Silverlight 5 Beta/Kinect for Windows SDK.在整个全程直播中. ...

  8. 计算机毕业设计中用js+html+java实现文件预览

    首先就这个文件格式来说有txt,html,doc,docx,xml等由于格式不一致,导致走了一些弯路,包括下载文件和网页预览 预览文件 //查看文件内容 function viewFile(aHtml ...

  9. java实现附件预览(openoffice+swftools+flexpaper)

    先附上本人参考的文章,基于的 flexpaper版本 为 1.5,本人由于使用的是 2.1.9 ,故之后说明: 已经支持加载中文文件名 代码下载 1.概述 主要原理 1.通过第三方工具openoffi ...

  10. java实现在线预览word,excel,ppt文档

    项目中遇到的word文档在线预览需求,查阅很多资料决定利用openoffice转换word文档为pdf进行预览实现. 1.下载openoffice4安装 www.openoffice.org: 2.导 ...

最新文章

  1. 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?...
  2. C# Windows CE使用小技巧实例
  3. 跨站访问如何保证session的正常使用
  4. oracle两表同步java代码,利用DBLink+JOB实现两个Oracle数据库之间的数据同步
  5. 交易性金融资产账务处理问题及改进
  6. 谷歌发布“虚拟现实化”游戏 Ingress
  7. 代言男科、站台微商、变身神棍....这些科学家被捧了几十年,黑历史曝光后,让人三观尽毁......
  8. 【渝粤教育】电大中专电商运营实操作业 题库
  9. python长代码_Python 的长代码文件怎么组织
  10. php表单密码由加密变明文,PHP 安全性漫谈 Linux+Apache+Mysql+PHP
  11. 文件夹缩写(文件夹空格问题解决)
  12. Word AddIn编译出现LINK2001 _main
  13. flutter中使用图标(含自制图标库方案)
  14. UGUI是如何频繁访问Image/Text等组件的raycastTarget的(读源码有感)
  15. 2018美赛ABCDEF题翻译
  16. 树莓派Ubuntu18.04使用及联网
  17. OpenJDK Runtime Environment (IcedTea6 1.13.10) (rhel-1.13.10.0.el6_7-x86_64) OpenJDK 64-Bit Server V
  18. TeamViewer 被发现用于(检测为)商业用途解决方案(亲测有效 )
  19. Batch Normation
  20. 像素和分辨率的关系 完全剖析

热门文章

  1. JavaCV推流实战(MP4文件)
  2. K3 Cloud 常用语法及常见异常
  3. win32-字体名称中文名和英文名的对照-c++
  4. SegNet 论文解析
  5. STEP文件格式总结
  6. 传输线理论 1/4波长阻抗变换器的分析匹配
  7. sfm点云代码_PCL点云显示sfm数据
  8. halcon教程- 边缘检测 亚像素边缘提取 轮廓提取
  9. linux ftp 服务配置
  10. ML笔记 - 自然语言处理常用技术