java有交互式_Java 9 尝鲜之交互式编程环境

077ef618dffafd4759bdff532cbe1e7e.png

JShell——Java 9 的交互式编程环境

本文要求读者有基本的 Java 知识。

Tips

Java 9 的代码由于提供了新特性,所以有些代码并不支持向后兼容。也就是说,用 Java 9 写的代码,有可能在 Java 8 或更早版本的 JDK 上不能运行。

1. 在操作系统上安装开发所需要的软件

首先,你需要下载 JDK 9 ( Java Development Kit 9 ) ,需要到此网站来 下载JDK 9 。首先需要先同意许可协议,然后就可以下载了。

Java 9 可以运行在很多平台上:

Windows 32-bitWindows 64-bitmacOS 64-bit (formerly known as Mac OS X or simply OS X)Linux 32-bitLinux 64-bitLinux on ARM 32-bitLinux on ARM 64-bit

下一步需要配置 环境变量 。跟之前的 JDK 配置方法相同。这里,我以 macOS 10.12 版本为例,在 Macbook 上的配置。这里会需要 vi 的一些基本操作,可以去网上查找如何使用。

下载完 JDK 后,直接运行。然后安装目录在:/library/Java/JavaVirtualMachines/jdk-9.jdk/在 Terminal 下,进入到你的用户的当前目录下(一打开就是你的用户默认目录,实在不清楚在命令行敲入 cd 则会切换到默认目录下)。在命令行中执行 ls -a 命令,列出当前目录下的包括隐藏的文件或目录。

96fea86554e38e7f957eb052b499658f.png

ls -a

4.找到 .bash_profile 文件,此文件会影响你当前用户的配置信息,并执行 vi .bash_profile 命令编辑此文件。

cf2048ef374be286e84dae12a37b70d7.png

vi .bash_profile

5.进入编辑页面后,配置 Java Home 和 Path 环境变量:

35a2435e7c63a1a6fc4aaffb66146454.png

配置 Java 环境变量

6.配置完以后,使用 esc 键退出编辑状态,输入“:wq”,保存并退出。并执行

. .bash_profile ,使配置文件立刻生效。

在命令行下执行 javac -version ,如果输出如下信息,则说明 JDK 配置正确。

d42d350edbd8819ad3b024fc4137928e.png

javac 9-ea

至此,JDK 配置完成。

启动JShell。

在Terminal下输 jshell -v ,

53a942c0e8e5a67b9b40cf8cb6759c84.png

jshell

此时,就进入JShell 开发环境,命令行里是以 jshell> 开头。

如果想退出JShell 环境,则输入 /exit 命令。

80b7646154935fe584c180f64fd6d2ba.png

退出 jshell

2. 理解在交互式编程环境下开发的好处

Java 9 中引入了交互式编程环境(REPL),这就是JShell,它允许可以执行 Java脚本代码,并且立即返回结果。因此,我们不需要创建什么一个解决方案或工程,就能很容易地编写代码并能很快的看到运行结果。我们不必等待整个项目 build 完去检查多行代码的执行结果。JShell,就像其他 REPL 一样,有利于探索式编程,我们很容易地进行交互式尝试和调试不同的算法和结构。

3. 第一个 JShell 下的 Java 代码

我们简单写一个 JShell 下的一个 Java 代码,就是一个打印输入。

System.out.println("Hello, Java 9, now I am in JShell!")

输出结果为:

a272db8ef3f38f15c96152529e4a543f.png

第一个 JShell 下的 Java 代码

Tips

在 JShell 环境下,语句末尾的“;” 是可选的。但推荐还是最好加上。提高代码可读性。

在一些例子中,我们将利用JShell 这一特性,提供对网络的访问。此功能与Web Service交互时非常有用。然而,你必须确保你的防火墙配置不会阻挡 JShell。

4. 查看默认导入和使用自动补全功能

默认情况下,JShell提供了一些常用包的导入,我们可以使用 import 语句导入必要的包或是从指定的路径的包,来运行我们的代码片段。我们可以输入以下命令列出所有导入的包:

/imports

下面就会列出已经导入的包:

f418695f0c99ab42f00db97c6a4183f6.png

imports

当我们在 JShell 之外写 Java 代码时,如所需要的 java.lang 包是默认导入的。在 JShell 下使用 /imports 命令并没没有列出这些包,以下是所有的在 JShell 环境下默认导入的包:

java.langjava.iojava.mathjava.netjava.nio.filejava.utiljava.util.concurrentjava.util.functionjava.util.prefsjava.util.regexjava.util.stream

此外,JShell 提供了自动补全的功能,只需按下 Tab 键,就能自动补全。

但有些情况下,根据我们输入的语句会对应很多选项,这时候 JShell 就会全部给你列出来。

例如,当我输入 S 时,就会列出来所以以 S 开头的类。

19ad9b92b8dd15ffd3972875d854fcca.png

自动补全

当我们想输入 System 类时,根据前面说的自动补全,只需要输入 Sys 然后按下 Tab 键,则自动补全, 然后再输入“.o”,则会自动补全方法, 在补全“System.out.”后按下 Tab 键,接下来就会列出当前类的所有的 public 方法的列表。

cb0b763136b0fa0eab44935c001b1683.png

list method

最后完整输入:

System.out.println("Auto-complete is helpful in JShell");

5. 在JShell中编写 Java 9 代码

首先,在命令行下可以执行 jshell -v 来进入命令行的开发环境。

下面我们定义 calculateRectangleArea 方法来计算一个正方形的面积。

float calculateRectangleArea(float width, float height) { return width * height;

a27cb539298541f7700c5d2c8e5d7c9b.png

calculateRectangleArea

然后输入回车,则会输入如下信息:

e4a24641abdf9588f11de7379c20bd27.png

created calculateRectangleArea

Tips

所有从 JShell 输出的消息用“|”表示。

输入 /list 在 JShell 中,会列出到目前为止当前 session 里所有有效的代码片段。

7b41e56d165b4a70d0cd1d3117aff2fc.png

/list

接下来我们定义一个 float类型的变量 width 并赋值为50:

float width = 50;

输入完上面的代码后,JShell 就会给我们如下信息:

a66454c480c5a6a1d4e2f2e9ceaa95fe.png

width

然后定义 height 变量:

float height = 25;

接着输入 float area = ca 然后自动补全为 float area = calculateRectangleArea( ,再输入刚才定义的变量 width 和 height ,则方法则计算出面积并返回1250.0。

45ab25e23939a0abd89bd6dde7abf0bb.png

Area

下面我们再使用 /list 列出到目前为止所有有效的代码片段。

7fdb79e8e669472bfc63132e3dfce07f.png

list again

输入以下代码:

System.out.printf("Width: %.2f, Height: %.2f, Area: %.2f ", width, height, area);

则会输入如下信息:

100ec63985a9b2ad65c62b0f4d818ffb.png

width, height, area

6. 计算表达式

Java 9 中运行我们评估任何有效的表达式,在 JShell中输入如下表达式:

width * height;

当我们输入上面的表达式,它就会给分配给一个临时的变量,这个变量以“$”开头,并跟着一个数字。这个变量是$6,但也有可能是$7, $8。

a3b93f16c97c8b6436ebab11c61dbdb0.png

在当前 session 中,我们可以在接下来的代码中直接使用此临时变量,例如:

System.out.printf("The calculated area is %.2f ", $6);

d80bad80030b7f5ea7f52e064f34086f.png

我们还可以使用之前的临时变量进行响应的运算,例如,

$6 + 10.5f;

f48a3e8feff818fcce15aa3ad77097e3.png

7. 使用变量、方法和源代码

到目前为止,我们创建了很多变量,我们可以使用 /vars 来查看当前 session 下所有创建过的变量:

dcf04fb2ee9dddcf49af726a625f5c4e.png

/vars

我们再定义一个方法:

float calculateRectanglePerimeter(float width, float height) { return 2 * (width + height);

然后使用 /methods 来查看所有的方法。

8596d96f20e4252ba167d93f1b5c022f.png

/methods

你也可以 修改已经存在的方法,例如, calculateRectanglePerimeter 的方法改为如下:

float calculateRectanglePerimeter(float width, float height) { float perimeter = 2 * (width + height);

然后输出以下信息:

5d6b183ba7f8f4fcad596476e30c38a3.png

change method

我们还可以使用 /list method name 来查看具体某一个方法的具体信息:

ebb89f37413fc160e8f09bf67479c86b.png

/list method name

8. 使用外部代码编辑器来编写 Java 代码

现在,我想对 calculateRectangleArea 方法做一些改动,如果这时有外部代码编辑器的话,做起来会很容易。

在 JShell 中可以启用JShell Edit Pad 编辑器,需要输入如下命令,来修改上面的方法:

/edit calculateRectangleArea

接下来就会显示编辑器对话框,和将要修改的方法:

73d2aa43ff8fee5cedb495e812e50142.png

JShell Edit Pad

代码修改完成以后,先点击“Accept”按钮,再点击“Exit”按钮,则退出编辑器,在 JShell 命令行中提示方法已经修改。

JShell Edit Pad 编辑器功能非常有限,仅能提供一些最基础的功能,不过好消息是,JShell 可以配置外部的代码编辑器,我们只需要使用 /edit 外部编辑器的完整路径 的方式,来指定外部的代码编辑器。

例如,我想使用Sublimet Text 作为外部的代码编译器,则需要使用如下命令:

/set editor "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl"

设置成功以后,返回如下信息:

368159ccc4e0b5c95c4dc16f43be4555.png

set editor

然后我们再执行 /edit calculateRectangleArea 命令,则就打开 Sublime Text,

97c88632206a237dffd3232eea4365c3.png

Sublime Text

9. 从外部加载源代码

如果我们已经有写好的 Java 文件,可以使用 /open 命令导入到 JShell 环境中,例如我现在有一个 Begin.java 文件,

void printHello() {

在 JShell 环境中执行以下语句:

/open /Users/i324779/Desktop/Begin.java

加载文件并执行:

9e32d23c38acafa39fb2c8973d9d89a6.png

推荐一下我的java免费资料分享群:614181335,里面都是学习java的,如果你正在学习,小编欢迎你加入,不定期分享干货,包括视频源码等,欢迎初学和进阶中的小伙伴

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值