Java9先睹为快:JShell动手实践

如何现在开始使用Java 9最酷特性之一?

创新互联建站是专业的永吉网站建设公司,永吉接单;提供成都做网站、成都网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行永吉网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

上周我终于抽出时间亲身体验了一个Java 9 的抢先体验版本。***站就是JShell,它也被称之为Kulla项目,这就是起初驱使我鼓起勇气去尝试Java9抢先体验版的原因。没错,官方的 Java 9发布时间目前定在2016年9月,但抢先体验版中已经有全功能的JShell。

 新文章:Java9先睹为快:JShell编程实践——#Java REPL http://t.co/F8cQ9X5dQM pic.twitter.com/JoWR6i8PSz

—— Takipi (@takipid) 2015年7月7日

有趣的事实 1:Kulla项目是JShell研发团队的内部名字。Kulla是美索不达米亚神话中的建筑者之神,他在施工结束后被放逐。这是在暗示Kulla的用例(use case)是一种学习工具吗?

那么到底什么是JShell?

JShell/Kulla项目是***个官方的Java REPL (Read-Eval-Print-Loop的缩写,即交互式编程环境),一种命令行工具。它允许你无需使用类或者方法包装来执行Java语句。它与 Python的解释器类似,或其它本地支持REPL的JVM语言,如Scala和Groovy。在Java 9即将到来的的特性中,这绝对是更有趣的特性之一。想了解正在来到你身边的JDK的更多有趣特性(Jigsaw项目除外!)你可以阅读早先我们关于Java 9的5大特性文章,这些特性可以改变你的编码方式。到现在为止,如果你要在Java中用REPL,你也可以使用替代方案,比如像具有多种语言支持的repl.it或非官方的Java REPL项目。不过使用Java9,REPL与langtools包一起直接捆绑到了JDK。

有趣的事实 2:另一个也有着神话般名字的OpenJDK项目就是Valhalla;其目标是超越Java 9,致力于数值类型和泛型具体化的特性研发。绝非善类。

废话少说,我们把它运行起来看看它能做什么。在下面很短的终端录制视频中,我们运行JShell v0.61完成一个快速测试(在OSX 10.10.3 中存在一个已知的问题,即提示与部分输出会混合显示在一起。无需在意,后续会被尽快修复)。

(译者注:JShell视频请参考原文)

回顾一下我们刚刚所看到的:JShell一些最有趣的特性

[8/7/2015] 更新:编辑于Brian Goetz的笔记,他是Oracle的Java架构师。

1、分号对于纯语句是可选的

Hello JShell! 基于REPL快速和灵活的特性,我们可以放松一下,不用在语句结束地方加分号:Hello JShell!

这里真没有分号哦

实际上,在我们发起的一个关于未来Java特性的调查中,该特性是受多数人认可的。当然分号仍被保留了下来,无论是作为终结符还是分隔符。REPL允许一次性键入纯表达式和语句,因此分号对于JShell终端用例是可选的。

2、REPL网络

使用JShell时,我们不会受限于机器和网络访问,这带来了一些有趣的机会。例如,想想把它当做一个终端来与服务器交流,远程连接到服务器并且从外面控制一些参数。另一个选择是查询数据库,这里真的是有***可能。

用JShell来获取一个HTTP请求header的简单例子

3、Help!保存和加载工作空间

除了运行和计算Java语句,JShell支持一系列命令行来帮助你了解和浏览REPL环境。你可以保存和加载工作空间(这让Java有点像脚本语言),且全部代码执行完成后可以在命令行提示下返回(此时你可以在终端视频中看到我提到过的OS X bug)。

其它有用的命令行都列出了所有当前可以用的变量和方法,显示出你的所有历史命令,并且列出了目前为止你写过的所有代码(这个有时表现得还是有点奇怪)。

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

JShell /help

4、没有受检异常

如果你一直担心受检异常会毁掉你的REPL经历——无需再担心,JShell在后台为你隐藏好了。在下面的例子中,本应当强迫我们捕获一个IOException,却没有出现。下面的例子是我们在读取和打印一个文件,不需要处理IOException。

有一种情况的确会有受检异常弹出,就是当我们尝试运行一个线程,并在里面使用了 Thread.sleep() 语句。由于这是一个整体的方法而非单独的纯语句,它必须是完全有效的Java语句:

继续来看一些没在终端视频中体现的其它特性

5、Java表达式

JShell终端还可以自己计算Java表达式。字符串连接、方法回调、算法,诸如此类。基本上,任何你可以包装在 System.out.println(/ expression here/) 里的都可以计算。正如你可能已经知道到的其它计算方式,它会立即将结果赋给自己的一个变量并打印出来。

6、向前引用

JShell给向前引用提供了很棒的支持,所以你在定义方法时可以引用其他方法或变量,且这些方法或变量仅会在一段时间后被定义。这是AdoptOpenJDK提供的REPL指南中的一个例子:

7、JShell API

JShell除了可以作为单独的JDK工具,还可以提供一个API,它能对外部调用开放所有的功能。这意味着外部工具可以连接并使用JShell的功能,如此一些很有趣的可能性突然就被开发了出来,比如在Eclipse、IntelliJ或Netbeans之类的IDE中引用它。对于该API可能还有更多创造性的用例,例如利用该API来扩展静态分析的工具,自动化测试或者甚至是连接到实时的JVM。

8、在运行中修改定义

你可以重新声明变量、方法或者类,而无需担心原始的声明。一旦你这样操作了,就会收到一个信息提示你发生了什么,但除此之外一切照旧。

彩蛋:你所需要的都是爱

如果你去查找目录/repl/samples,将会发现这个使用Swing做出来的可爱样例,会给你画3颗小心心:

Java <3 REPL

你自己如何开始使用JShell?

开始之前,看看Adopt OpenJDK上的说明书:伦敦Java社区(LJC)的入门套件。下面是步骤的快速摘要,来帮助你顺利开始。特别是如果你之前从未玩过Java抢先体验版本。

1、安装 Java 9抢先体验版本JDK
2.编译kulla-dev分支

1

2

3

4

5

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

1

2

cd langtools/repl

bash ./scripts/compile.sh

4、然后……现在你可以准备运行了

1

bash ./scripts/run.sh

对于OS X用户的重要提示:在运行 compile.sh & run.sh 之前,编辑这些脚本,把 #!/usr/bin/sh 修改为 #!/bin/sh。

如果对于该过程有任何疑问,请提交到下面的评论区,我们会尽可能给予帮助。

总结

很兴奋能够看到Kulla项目日趋成熟,最终将达到功能齐全的状态。JShell有很广泛的用例,但是首要的是能帮助新的和现有的开发者快速测试他 们新学会的技巧。基本的Java或新的类只是让你开始充实大脑。此外,在当下这段时间,JShell使得Java与其它拥有这些功能的语言处于同等水平, 或许未来还可以在官方的API和流畅的命令行体验下,开创新的思路。

网站栏目:Java9先睹为快:JShell动手实践
当前链接:http://www.shufengxianlan.com/qtweb/news7/304457.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联