repl java9_Java 9抢先体验:与JShell进行动手实践– Java REPL

repl java9

从今天开始,如何开始使用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使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

repl java9

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

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

相关文章

java iterator获取索引_2020年Java面试题最新整理(1625)

16.Java集合框架是什么&#xff1f;说出一些集合框架的优点&#xff1f;每种编程语言中都有集合&#xff0c;最初的Java版本包含几种集合类&#xff1a;Vector、Stack、HashTable和Array。随着集合的广泛使用&#xff0c;Java1.2提出了囊括所有集合接口、实现和算法的集合框架。…

搞定红黑树(C++实现)

点击蓝字关注我们来源于网络&#xff0c;侵删红黑树的概念红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是红色或黑色。通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条…

java方法重载和重载方法_Java 8的方法参考进一步限制了重载

java方法重载和重载方法方法重载一直是一个充满喜忧参半的话题。 我们已经在博客上介绍了它&#xff0c;并介绍了几次警告&#xff1a; 您会后悔对Lambdas应用重载&#xff01; 保持干燥&#xff1a;方法重载 为什么每个人都讨厌操作员超载 API设计师&#xff0c;请小心 重…

在python中字符串可以使用什么来表示_Python 字符串定义

例如&#xff1a;’string’、”string”、”””string”””或者是”’string”’。在使用上&#xff0c;单引号和双引号没有什么区别。三引号的主要功能是在字符串中可以包含换行。也就是说&#xff0c;在三引号中的字符串&#xff0c;如果其中的内容在程序中是分行的&#…

java launcher_JAR清单类路径不仅适用于Java Application Launcher

java launcher自从我开始学习Java以来​​&#xff0c;我几乎已经知道&#xff0c; 清单文件中的Class-Path标头字段为可执行JAR &#xff08;具有由另一个称为Main-Class清单指定应用程序起点的 JAR&#xff09;指定了相对运行时类路径。 一个同事最近碰到一个让我感到惊讶&am…

C语言实现银行ATM存取款系统 | 附源码

点击蓝字关注我们来源于网络&#xff0c;侵删银行ATM存取款系统银行ATM存取款系统业务描述如下&#xff1a;银行ATM存取款系统能为用户提供存款、取款、查询、转账和修改密码的功能。为了模拟真实的ATM业务环境&#xff0c;本系统必须实现存款、取款、查询、转账、修改密码以及…

php 链接文件名_7、php-fpm进程管理

1、进程管理php-fpm采用的是master-worker的进程方式。其中&#xff0c;master负责fork worker进程;其次&#xff0c;注册信号&#xff0c;通过信号进行管理worker负责监听端口&#xff0c;等待链接&#xff0c;处理具体的逻辑如下图所示2、信号管理master进程可以理解如下信号…

C语言代码实现平衡二叉树|图解+详细代码

点击蓝字关注我们来源于网络&#xff0c;侵删1. 什么是平衡二叉树平衡二叉树&#xff0c;我们也称【二叉平衡搜索树/AVL】,树中任何节点的两个子树的高度最大差别为1&#xff0c;巴拉巴拉。。。(https://baike.baidu.com/item/AVL树/10986648?fraladdin)但是有个注意的点: 平衡…

cba比赛比分预测_【CBA直播】深圳vs广东前瞻:深圳战广东再掀反攻?

北京时间4月13日晚19点35分&#xff0c;CBA季后赛半决赛第三回合&#xff0c;深圳队主场迎战广东队。尽管目前双方总比分深圳以0-2落后对手&#xff0c;但他们在第二战的顽强表现给人留下了深刻印象。回归主场作战的他们&#xff0c;将在沈梓捷和贺希宁的带领下&#xff0c;力争…

spring 启动进度_在Web浏览器中显示Spring应用程序启动的进度

spring 启动进度重新启动企业应用程序时&#xff0c;客户打开Web浏览器时会看到什么&#xff1f; 他们什么也没看到&#xff0c;服务器还没有响应&#xff0c;因此Web浏览器显示ERR_CONNECTION_REFUSED 应用程序前面的Web代理&#xff08;如果有&#xff09;注意到它已关闭&a…

C语言内存泄漏问题及其检视方法

点击蓝字关注我们来源于网络&#xff0c;侵删通过介绍内存泄漏问题原理及检视方法&#xff0c;希望后续能够从编码检视环节就杜绝内存泄漏导致的网上问题发生。本文通过介绍内存泄漏问题原理及检视方法&#xff0c;希望后续能够从编码检视环节就杜绝此类问题发生。预防内存泄漏…

未定义与 struct 类型的输入参数相对应的函数 fetch_引入鲁棒性作为连续参数,这种新损失函数实现了自适应、随时变换...

编辑&#xff1a;陈萍损失函数是机器学习里最基础也是最为关键的一个要素&#xff0c;其用来评价模型的预测值和真实值不一样的程度。最为常见的损失函数包括平方损失、指数损失、log 对数损失等损失函数。这里回顾了一种新的损失函数&#xff0c;通过引入鲁棒性作为连续参数&a…

清理jdk注册表_JDK 9早期版本安装后的Windows注册表清理

清理jdk注册表在我的上一篇博文中 &#xff0c;我演示了在安装早期版本的JDK 9&#xff08;内部版本68&#xff09;之后围绕Oracle Java符号链接 &#xff08;基于Windows的计算机上的C:\ProgramData\Oracle\Java\javapath\目录&#xff09;的问题的解决方案。这似乎阻止了早期…

汇编语言调用C语言/C++实例:乘法表

点击蓝字关注我们来源于网络&#xff0c;侵删现在编写一个简单的应用程序&#xff0c;提示用户输入整数&#xff0c;通过移位的方式将其与 2 的幕 (2〜2ⁿ) 相乘&#xff0c;并用填充前导空格的形式再次显示每个乘积。输入-输出使用 C。汇编模块将调用 3 个 C 编写的函数。程序…

rect函数_R函数不会写,quot;抄quot;总会吧!

前面我们简单的介绍了R函数。有些人可能会说&#xff0c;我现在的R水平有限&#xff0c;还不足以写出很高级的函数&#xff0c;该怎么办&#xff1f;俗话说前人栽树后人乘凉&#xff0c;他山之石可以攻玉&#xff0c;鲁迅同志也提出过“拿来”主义。已经有前人&#xff0c;高手…

rest服务swagger_使用Swagger轻松记录您的Play Framework REST API

rest服务swagger该帖子最初在http&#xff1a;// swag ger.io&#xff08;7/30/2015&#xff09;上发布 我一直在使用Play Framework作为多个项目的基于Java的&#xff0c;闪电般的REST后端框架。 后来&#xff0c;我很高兴找到Swagger&#xff0c;并努力将其集成到几个项目中…

10个超赞的C语言开源项目,强烈推荐!

点击蓝字关注我们来源于网络&#xff0c;侵删今天分享10个超赞的C语言开源项目&#xff0c;希望这些内容能对大家有所帮助&#xff01;目录&#xff1a;1. Webbench2. Tinyhttpd3. cJSON4. CMockery5. Libev6. Memcached7. Lua8. SQLite9. UNIX v610. NETBSD1. WebbenchWebbenc…

python使用欧氏距离knn_python运用sklearn实现KNN分类算法

KNN(K-Nearest-Neighbours Classiflication)分类算法&#xff0c;供大家参考&#xff0c;具体内容如下最简单的分类算法&#xff0c;易于理解和实现实现步骤&#xff1a;通过选取与该点距离最近的k个样本&#xff0c;在这k个样本中哪一个类别的数量多&#xff0c;就把k归为哪一…

jboss性能指标_JBoss BRMS复杂事件处理(CEP)性能基准

jboss性能指标技术来了又去&#xff0c;但是一件事保持不变。 在设计企业解决方案时&#xff0c;我们喜欢使我们的生活更轻松的复杂组件&#xff0c;作为建筑师和开发人员&#xff0c;我们一直在寻找使我们的生活更轻松的方法。 一种方法是跟上与感兴趣的技术有关的流行新站点…

C语言经验分享:二维指针与二维数组的两种错误用法

点击蓝字关注我们来源于网络&#xff0c;侵删引子首先看一段代码:void test(int *p) {}int main() {int arr[] {30, 450,14,5};test(arr);return 0; }毫无疑问&#xff0c;上面这段代码是运行OK的。因为C语言标准中有以下规则:在函数参数的声明中&#xff0c;数组名被编译器当作…