Java 9抢先体验:与JShell的动手实践– Java REPL

从今天开始如何开始使用Java 9最酷的功能之一?

上周末,我终于开始尝试使用Java 9的早期访问版本了。第一站是JShell,它也被称为Project Kulla。 首先让我鼓起勇气尝试早期访问Java版本的原因。

那就对了。 Java 9的正式发布日期当前设置为2016年9月,但是早期访问版本已经具有功能完整的JShell版本。 它仍在开发中,并且有一些古怪之处,但这从来没有阻止过我们。

有趣的事实1: Kulla项目是开发JShell的团队的内部名称。 库拉(Kulla)是美索不达米亚神话中的建筑神的名字,他在建筑工作完成后被驱逐。 暗示Kulla用例是一种学习工具吗?

那么,JShell是什么呢?

JShell / Project Kulla是第一个正式的Java REPL(Read-Eval-Print-Loop),这是一个命令行工具,使您可以自己运行Java语句,而不必将它们包装在类或方法中。 与Python的解释器或其他本机支持REPL的其他JVM语言(例如Scala和Groovy)类似。 在Java 9即将发布的功能中,它绝对是更有趣的功能之一。 要查看您附近的JDK即将推出的更多激动人心的功能(除了Project Jigsaw!),您可以阅读有关Java 9的前5个功能的前一篇文章, 这些文章将改变您的编码方式 。 到现在为止,如果您想使用Java进行REPL,则可以使用具有多种语言支持的repl.it之类的替代方案,或者使用非官方的Java REPL项目。 不过,在Java 9中,REPL与langtools软件包一起捆绑在JDK中。

有趣的事实2: 另一个带有神话名称的OpenJDK项目是Valhalla项目。 不仅限于Java 9,还致力于诸如值类型和泛型泛型等功能。 绝对是坏蛋。

但是,够了,让我们启动它,看看它能做什么。 在下面的简短终端编码中,我们将使用JShell v0.61进行快速测试(OSX 10.10.3存在一个已知问题,其中提示与一些输出混合在一起,所以请不要介意,它将可能很快就会解决):

启动并使用JShell

回顾我们刚刚看到的内容:JShell的一些最有趣的功能

** [8/7/2015]更新:使用Oracle Java语言架构师Brian Goetz的注释进行编辑

1.在裸露的语句上分号是可选的

您好JShell! 凭借REPL的快速和灵活特性,我们可以放轻松一些,而不必在声明的末尾添加分号:

不,这里没有分号

不,这里没有分号

实际上,这是我们围绕将来的Java功能进行的一项调查中的一个受欢迎的回答。 当然,分号可以作为终止符或分隔符保留在这里。 REPL允许一次输入裸表达式和语句,因此分号对于Jshell上的终止符用例而言是可选的。

2. REPL网络

使用JShell,我们不仅限于我们的机器 ,还可以访问网络,这带来了一些有趣的机会。 例如,考虑将其用作与服务器通信的终端,远程连接到服务器并从外部控制某些参数。 另一个选择是查询您的数据库,这里的可能性确实是无限的。

显示通过JShell获取HTTP标头的简单示例

显示通过JShell获取HTTP标头的简单示例

3.帮助! 保存和加载工作区

除了运行和评估Java语句外,JShell还支持一系列命令,以帮助您了解和浏览REPL环境。 您可以保存和加载工作区(使Java类似于脚本语言的工作区),然后在执行所有代码后返回命令提示符(实际上您可以在终端记录中看到我提到的OS X错误)。 。

其他有用的命令是列出所有当前可用的变量和方法,查看所有命令历史记录,并列出到目前为止所编写的所有代码(有时仍然有些怪异)。

这是当前可用命令的完整列表:

JShell的/帮助

JShell的/帮助

4.没有检查过的异常

如果您担心被检查的异常会破坏您的REPL体验–不再害怕,那么JShell会在后台为您包装这些异常。 在下面的示例中,迫使我们捕获IOException的原因没有引起注意。 在这里,我们在不处理IOException的情况下读取和打印文件:

经过jshell检查

我们确实看到弹出一个检查到的异常的情况是,当我们尝试运行线程并在其中使用Thread.sleep()时。 由于它是一个完整的方法,而不是单个裸语句,因此它必须是完全有效的Java:

jshell中断

继续进行一些其他未在终端录制中使用的功能:

5. Java表达式

关于JShell终端的另一件事是,它还可以在其上评估Java表达式。 字符串连接,方法调用,算术等。 基本上,您可以在System.out.println(/ *此处* /)中包装的任何内容。 正如您可能已经在其他评估中注意到的那样,它将立即将结果放入其自己的变量中并打印出来:

jshell算术

6.转发参考

JShell对前向引用提供了相当不错的支持,因此您可以定义引用其他方法或变量的函数,这些方法或变量只会在以后定义。 这是AdoptOpenJDK的REPL教程中的示例:

jshell转发参考

7. JShell API

除了用作独立的JDK工具外,JShell还将提供一个API,可将其所有功能开放给外部使用。 这意味着外部工具可以连接并使用JShell的功能,并且突然出现了一些有趣的可能性,例如将其包含在Eclipse,IntelliJ或Netbeans等IDE中。 该API更具创造性的用例可能包括使用它来扩展静态分析功能,自动测试甚至可能挂接到实时JVM的工具。

8.随时更改定义

您可以重新声明变量,方法和类,而不必担心原始声明。 完成此操作后,系统会提示您一条消息,让您知道发生了什么,但除此之外–一切照旧。

奖励:您需要的只是爱

如果您深入研究/ repl / samples文件夹,则会发现这个可爱的示例,它将使用Swing吸引您3个小小的心:

Java <3版本

Java

如何独自上手?

首先,请查看伦敦Java社区(LJC)的“ 采用OpenJDK:入门工具包”中的说明。 以下是对帮助您起步的步骤的简要概述,尤其是如果您以前从未使用过早期访问JDK版本时,尤其如此:

  1. 安装Java 9抢先体验JDK
  2. 构建kulla-dev分支:
    hg clone http://hg.openjdk.java.net/kulla/dev kulla-dev
    cd kulla-dev
    bash configure –with-boot-jdk=/path/to/jdk1.8.0
    make clean images
    make install <=== optional
  3. 建立REPL:
    cd langtools/repl
    bash ./scripts/compile.sh
  4. 并且...现在您可以运行了:
    bash ./scripts/run.sh

对于OS X用户的重要说明:在运行compile.sh和run.sh之前,请编辑脚本并将#!/ usr / bin / sh更改为#!/ bin / sh

如果您对此过程有任何疑问,请在下面的评论部分中发布它们,我们将竭尽所能。

结论

令人兴奋的是,库拉计划(Project Kulla)越来越接近成熟,它将具有功能完善的状态。 JShell具有广泛的用例,但首先,它将帮助新老开发人员快速测试他们的新技能。 无论是基本的Java还是新的库,您都刚刚开始思考。 而且,JShell使Java与具有这些功能的语言相提并论已有一段时间了,甚至还可以通过正式的API和流畅的命令行体验进一步推动Java的发展。

翻译自: https://www.javacodegeeks.com/2015/07/java-9-early-access-a-hands-on-session-with-jshell-the-java-repl.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSRF的绕过与利用

Origin & Referer Bypass Null值绕过 当遇到一个cors可用null值绕过时&#xff0c;用iframe配合data协议&#xff0c;就可以发送一个origin为null的请求。这个绕过方式同样也可以用在CSRF这里。 1<iframe sandbox"allow-scripts allow-top-navigation allow-forms&…

ASP.NET中禁止继承IIS中web.config根目录的配置

异常信息&#xff1a; Configuration Error Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately. Parser…

教你玩转CSS Position(定位)

目录 CSS Position(定位) static 定位 fixed 定位 relative 定位 absolute 定位 sticky 定位 重叠的元素 所有的CSS定位属性

jOOQ配置

本文是我们学院课程的一部分&#xff0c;标题为jOOQ –类型安全的数据库查询 。 在SQL和特定关系数据库很重要的Java应用程序中&#xff0c;jOOQ是一个不错的选择。 当JPA / Hibernate抽象过多&#xff0c;JDBC过多时&#xff0c;这是一种替代方法。 它显示了一种现代的领域特…

可隐藏选项卡html,隐藏HTML中选定选项卡的底部边框

我有一个水平HTML选项卡&#xff0c;其中我希望隐藏所选选项卡的底部边框。隐藏HTML中选定选项卡的底部边框这个问题已经被问here和here但这两种解决方案都不能正常工作&#xff0c;因为我使用一个div结构&#xff0c;没有太大的JavaScript。jQuery(.tab-links a).on(click, fu…

JWT攻击手册

JSON Web Token&#xff08;JWT&#xff09;对于渗透测试人员而言可能是一种非常吸引人的攻击途径&#xff0c;因为它们不仅是让你获得无限访问权限的关键&#xff0c;而且还被视为隐藏了通往以下特权的途径&#xff1a;特权升级&#xff0c;信息泄露&#xff0c;SQLi&#xff…

DIV+CSS 入门

玩一小会儿前csdn什么时候&#xff0c;页面上的加qq而微博&#xff0c;我认为这是美好的。牛腩完成。运营商也开始了他真正的学习B/S之旅。刚開始的时候&#xff0c;我不知道<div>是什么 也不清楚CSS用来干什么的&#xff0c;敲完了回过头来再看&#xff0c;好像明确了一…

教你玩转CSS Overflow

目录 CSS Overflow overflow: visible CSS 布局 - Overflow CSS overflow 属性用于控制内容溢出元素框时显示的方式。 <style>#overflowTest {background: #4CAF50;color: white;padding: 15px;width: 80%;height: 100px;overflow: scroll;border: 1px solid #ccc;}&l…

了解Callable和Spring DeferredResult

1.简介 Servlet 3.0中引入的异步支持提供了在另一个线程中处理HTTP请求的可能性。 当您有一个长期运行的任务时&#xff0c;这特别有趣&#xff0c;因为当另一个线程处理此请求时&#xff0c;容器线程将被释放并可以继续处理其他请求。 关于这个主题的解释已经很多次了&#x…

html表单复选框样式,美化表单——自定义checkbox和radio样式

如果你对本站比较观注的话&#xff0c;应该很清楚&#xff0c;前面就有这方面的介绍。因为大家都知道表单中的部分元素如果单单使用CSS是没办法完成的&#xff0c;所以最近花全力在学习这方面的制作。在本站有关于这样制作有好几个教程了&#xff0c;比如说&#xff1a;我主要是…

BZOJ 3436: 小K的农场( 差分约束 )

orz云神...真的给跪了...BFS版spfa T 掉了...然后DFS版的就A了...我现在很迷茫....这就是个普通的差分约束... ------------------------------------------------------------------------------#include<cstdio>#include<cstring>#include<algorithm>#incl…

教你玩转CSS Float(浮动)

目录 什么是 CSS Float(浮动)? 元素怎样浮动 彼此相邻的浮动元素 清除浮动 - 使用 clear CSS 中所有的浮动属性 什么是 CSS Float(浮动)? CSS 的 Float(浮动),会使元素向左或向右移动

CORS同源策略

同源策略 什么是同源策略&#xff08;Same Origin Policy&#xff09;&#xff1f;什么是跨域?什么是域名? 什么是同源策略&#xff08;Same Origin Policy&#xff09;&#xff1f; 所谓同源策略&#xff0c;所谓同源是指&#xff0c;域名&#xff0c;协议&#xff0c;端口…

把html文件变成php,怎么把动态的php文件转换成静态的html文件,html文件是php文件…...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼生成静态文件除了2楼所说的ob缓存方法之外&#xff0c;还有一种方法就是通过使用模板替换技术实现(正则表达式)header("content-type:text/html;charsetutf-8");//处理添加、修改、删除请求//1.接收一下oper$oper$_REQUE…

[转]hadoop新手错误解决方法

解决Exception: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z 等一系列问题&#xff0c;ljavalangstring 一&#xff0e;简介 Windows下的 Eclipse上调试Hadoop2代码&#xff0c;所以我们在windows下的Eclipse配置hadoop-eclipse-plugin-2.6…

教你玩转CSS 居中

目录 元素居中对齐 文本居中对齐 图片居中对齐 左右对齐 - 使用定位方式 左右对齐 - 使用 float 方式 垂直居中对齐 - 使用 padding

JSFinder—从js文件中寻找敏感接口和子域名

说在前面 在渗透测试及漏洞挖掘过程中&#xff0c;信息搜集是一个非常重要的步骤。而在网站的JS文件中&#xff0c;会存在各种对测试有帮助的内容。 比如&#xff1a;敏感接口&#xff0c;子域名等。 社区内的文章也有有些关于JS文件提取信息的片段&#xff0c;比如Brupsuit…

spring 测试 事务_Spring陷阱:事务测试被认为是有害的

spring 测试 事务Spring杀手级功能之一是容器内集成测试 。 尽管EJB多年来一直缺乏此功能&#xff08;Java EE 6终于解决了这个问题&#xff0c;但是我尚未进行测试&#xff09;&#xff0c;但是Spring从一开始就允许您从Web层开始&#xff0c;通过所有服务来测试整个堆栈。到数…

HTML页面加载和解析流程详细介绍

浏览器加载和渲染html的顺序1. IE下载的顺序是从上到下&#xff0c;渲染的顺序也是从上到下&#xff0c;下载和渲染是同时进行的。 2. 在渲染到页面的某一部分时&#xff0c;其上面的所有部分都已经下载完成&#xff08;并不是说所有相关联的元素都已经下载完&#xff09;。 3.…

计算机四级必背知识点,2019年6月计算机四级数据库工程师必备考点

【导语】2019年6月计算机四级考试备考正在进行中&#xff0c;为了方便考生及时有效的备考&#xff0c;那么&#xff0c;无忧考网为您精心整理了2019年6月计算机四级数据库工程师必备考点&#xff0c;希望对您备考有帮助。如想获取更多计算机等级考试的模拟题及备考资料&#xf…