【软件构造】在软构实验中使用JShell快捷检验语言特性

对于我这样不常使用Java进行开发的人来说,在写软构实验的时候,经常需要验证自己关于语言特性的猜想是否正确。例如,我曾经产生了如下疑问:将一个Map的内容使用构造函数复制到另一个Map中以后,修改第二个Map中某个键关联的值,会不会影响到第一个Map呢?如果使用传统的方式编程验证,则需要从头开始新建工程,编辑代码并运行;即使是从现有的工程中验证,也需要修改主类代码进行验证。无论用哪种方式,都比较麻烦。

我使用JavaScript、Python等语言较多,这类语言都支持一种交互式运行环境"REPL"(Read-Eval-Print-Loop),允许我们从控制台中直接输入并执行代码。对于JavaScript来说,这包括浏览器调试器中的控制台和Node.js的控制台程序,而在命令行中运行Python就能进入Python的REPL。那么,Java有没有类似的交互式运行环境呢?经过上网查询,我了解到JShell就是这样的程序。

根据官方介绍,JShell从JDK9开始被包含。Oracle官网对JShell的描述如下:

Using JShell, you can enter program elements one at a time, immediately see the result, and make adjustments as needed.

Java program development typically involves the following process:

  • Write a complete program.

  • Compile it and fix any errors.

  • Run the program.

  • Figure out what is wrong with it.

  • Edit it.

  • Repeat the process.

JShell helps you try out code and easily explore options as you develop your program. You can test individual statements, try out different variations of a method, and experiment with unfamiliar APIs within the JShell session. JShell doesn’t replace an IDE. As you develop your program, paste code into JShell to try it out, and then paste working code from JShell into your program editor or IDE.

也就是说,使用JShell,我们可以和使用Python REPL一样,快速地输入运行代码,并看到运行结果。现在,我们使用JShell来验证一下开头我们提出的疑问。在cmd或PowerShell中,输入jshell并回车,即可进入JShell提供的REPL:

然后,直接创建一个Map<String,Integer>类型的对象m1,并插入两组键值对:

 可以看到,在JShell REPL中,一行Java代码可以由分号结束也可以不由分号结束,变得和JavaScript一样。

然后,创建m2对象并向构造函数传入m1作为参数:

然后验证我们的猜想。注意,在JShell REPL中,输入变量名后按下回车,就可以直接打印出变量的内容。

至此,我们已经使用JShell快捷地得到了疑问的答案:将一个Map的内容使用构造函数复制到另一个Map中以后,修改第二个Map中某个键关联的值,不会影响到第一个Map。

通过这个示例可以看到,JShell可以帮助我们在学习软件构造时快捷地了解Java语言。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值