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,一经查实,立即删除!

相关文章

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;好像明确了一…

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…

CORS同源策略

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

[转]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…

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

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

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

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

使用API​​密钥(aka身份验证令牌)部署到Maven Central

如何在不使用未加密本地密码的情况下与Maven Central / Nexus通信&#xff08;尤其是使用Gradle&#xff0c;但不仅限于此&#xff09;。 基本原理 不幸的是&#xff0c;Gradle&#xff08;和许多其他构建工具&#xff09;没有提供任何机制来本地加密密码&#xff08;或至少编…

docker部署nessus+awvs

镜像使用方法 搜索镜像sudo docker search awvs-nessus 然后没有latest标签的镜像&#xff0c;拉取镜像需要使用sudo docker pull leishianquan/awvs-nessus:v03 下载时间有点长&#xff0c;下载后&#xff0c;查看镜像sudo docker images leishianquan/awvs-nessus:v03 盘…

如何取消计算机用户名,Win10如何取消登录界面显示用户名?

Win10如何取消登录界面显示用户名?求之不得&#xff0c;梦寐思服。得到之后&#xff0c;不过尔尔!不知道您为什么求Win10取消登录界面显示用户名的操作方法&#xff0c;个人感觉&#xff0c;结果很令人不习惯。还不如改成直接登陆系统呢!既然搜索&#xff0c;必然有用&#xf…

sqlmap (--os-shell)的使用

文章目录 第一步 搭建存在sql注入的网站第二步 扫描注入点第三步 选择网站的语言第四步 输入网站的绝对路径第五步 查看权限 第一步 搭建存在sql注入的网站 第二步 扫描注入点 python sqlmap.py -u "http://192.168.232.129/cms/show.php?id33" --os-shell第三步…

FOFA网络空间搜索引擎使用教程

FOFA网络空间搜索引擎使用教程 FOFA是白帽汇推出的一款网络空间搜索引擎&#xff0c;它通过进行网络空间测绘&#xff0c;能够帮助研究人员或者企业迅速进行网络资产匹配&#xff0c;例如进行漏洞影响范围分析、应用分布统计、应用流行度排名统计等。 官网&#xff1a;https:…

html5拖动的面板 panel,基于jQuery UI的Bootstrap Panel面板功能增强插件

LobiPanel是一款基于jQuery UI的Bootstrap Panel面板功能增强插件。通过该插件可以为Bootstrap的原生Panel面板增加编辑标题&#xff0c;最大化&#xff0c;最小化&#xff0c;面板拖动关闭面板等功能。使用方法使用该Bootstrap面板功能增强插件需要引入jquery&#xff0c;jque…

sqlmap --tamper 绕过WAF脚本分类整理

每当注入的时候看到这个贱贱的提示框&#xff0c;内心有千万只草泥马在奔腾。 但很多时候还是得静下来分析过滤系统到底过滤了哪些参数&#xff0c;该如何绕过。 sqlmap中的tamper给我们带来了很多防过滤的脚本&#xff0c;非常实用&#xff0c;可能有的朋友还不知道怎样才能最…

table 首先冻结_首先记录异常的根本原因

table 首先冻结Logback日志库的0.9.30版本带来了一个很棒的新功能&#xff1a;从根&#xff08;最内部&#xff09;异常而不是最外部异常开始记录堆栈跟踪。 当然&#xff0c;我的激动与我贡献了此功能无关。 用塞西尔德米勒&#xff08;Cecil B. de Mille&#xff09; 的话来形…

Spring Boot框架敏感信息泄露的完整介绍与SRC实战(附专属字典与PoC)

转载于&#xff1a;https://www.freebuf.com/vuls/289710.html #前言##Spring Boot框架介绍Spring框架功能很强大&#xff0c;但是就算是一个很简单的项目&#xff0c;我们也要配置很多东西。因此就有了Spring Boot框架&#xff0c;它的作用很简单&#xff0c;就是帮我们自动配…

从外网Thinkphp3日志泄露到杀入内网域控 - 红队攻击之域内靶机渗透实战演练

1.简要描述 这个工具写完有一段时间了&#xff0c;看网上目前还没有一个thinkphp的漏洞集成检测工具&#xff0c;所以打算开源出来。 2.代码结构 插件化思想&#xff0c;所有的检测插件都plugins目录里&#xff0c;TPscan.py主文件负责集中调度。 插件目录: ThinkPHP 用户…

使用WildFly 9和Jolokia监视DevOps样式

DevOps是当今最热门的话题之一。 而且围绕它的主题范围很广&#xff0c;因此很难真正找到完整的描述或涵盖体面粒度的所有内容。 可以肯定的一件事&#xff1a;最重要的部分之一是提供正确的度量标准和信息以监视应用程序。 Java EE和JMX 监视Java EE服务器的标准方法是JMX。 …

QQ聊天记录恢复、迁移教程(改变默认存储位置、个人文件夹保存位置)

方法一&#xff1a;适用于将原QQ聊天记录存储位置迁移至非系统盘 1、 在想要存储的区域新建文件夹&#xff0c;如&#xff1a; E:\099 Chat Data\Tencent Files\。 2、 打开电脑QQ&#xff0c;设置——文件管理。 3、 点击浏览&#xff0c;选择099 Chat Data下的Tencent Files…