一直以来,Java 人员最痛苦的莫过于写一些简单的代码片段也要架设一个比较完整的 Java 项目工程,一直以来,一个交互式实时命令行工具是大家所期盼的。
但是我发现,身边的朋友,很少使用 JShell,一方面可能是大家都不知道,另一方面,说起来有点遗憾,就是大家都还不知道要怎么用。活生生的现实版 Java11 都出了,很多人却停留在 Java7 或 Java8 上。
不扯那么多了,我会用几篇文章给大家详解下 JShell,这篇文章主要的内容就是介绍介绍这个 JShell。
JShell 简介
JShell 是一个 Java Shell 工具,是一个用于学习 Java 编程语言和 Java 代码原型的交互式工具。
JShell 是一个 Read Evaluate Print Loop ( 中文 「 交互式解释器 」, 简称 REPL
),JShell 会在输入时运行声明,语句和表达式,并立即显示结果。
为什么使用 JShell
一个 REPL 最大的好处就是输入即结果,也就是在按下回车的那一霎那就会立即显示刚刚输入的代码的运行结果。
也就是说,使用 JShell,我们可以一次输入一段程序代码,立即查看结果,并根据需要进行调整。
Java 开发是一个非常复杂的过程,具体复杂到什么程度呢 ?
- 写一个完整的代码片段。
- 编译它并修复一些错误。 使用
javac
命令。 - 运行编译后的代码。使用
java
命令。 - 如果运行出错,则需要找出为什么出错。
- 编辑代码。
- 重新开始整个过程。
当然了,这是很多编程语言都需要经过步骤,悲剧就悲剧在 Java 需要使用两个命令才能完成整个过程。
JShell 可帮助我们在开发程序时尝试即时代码并轻松探索可能的选择。我们可以在 JShell 中测试单个语句,尝试不同的方法变体,并在 JShell 会话中试验不熟悉的 API。
我们可以首先将自己写的代码片段粘贴到 JShell 中运行,查看结果,如果正确,就将 JShell 中的代码粘贴回程序编辑器或 IDE 中。
注意: JShell 并不能替换 IDE,它的目标也不是替换任何 IDE。
确定 Java 版本
因为 JShell 是 JDK9 的新功能,所以你的 Java 版本一定要 Java 9 以上
可以使用下面的命令查看你的 Java 版本
[yufei@www.twle.cn ~]$ java -version java version "10.0.2" 2018-07-17 Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13) Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode)
我因为比较时髦 ( 写教程惹的祸 ),用的是最新的 Java 10
立即开始使用 JShell
其实,并不需要输入 java -version
来先查看版本,直接在命令行中输入 jshell
命令即可
jshell
如果一切顺利,就会显示欢迎词语
[yufei@www.twle.cn ~]$ jshell | 欢迎使用 JShell -- 版本 10.0.2 | 要大致了解该版本, 请键入: /help intro jshell>
如果 Java 环境配置不正确或者 Java 版本过低,就会直接显示命令没找到
[yufei@www.twle.cn ~]$ jshell -bash: jse: command not found
需要说明的是,如果你的 java 9 以上的版本的 bin
路径并没有包含在 PATH 环境变量中,则需要输入绝对路径,比如
[yufei@www.twle.cn ~]$ /Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home/bin/jshell | 欢迎使用 JShell -- 版本 10.0.2 | 要大致了解该版本, 请键入: /help intro jshell>
显示 jshell 帮助
就如同刚进入 jshell 是显示的提示那样,直接输入 /help
命令可以获取所有的帮助信息
jshell> /help | 键入 Java 语言表达式, 语句或声明。 | 或者键入以下命令之一: | /list [<名称或 id>|-all|-start] | 列出您键入的源 | /edit <名称或 id> | 编辑源条目 | /drop <名称或 id> | 删除源条目 | /save [-all|-history|-start] <文件> | 将片段源保存到文件 | /open <file> | 打开文件作为源输入 | /vars [<名称或 id>|-all|-start] | 列出已声明变量及其值 | /methods [<名称或 id>|-all|-start] | 列出已声明方法及其签名 | /types [<名称或 id>|-all|-start] | 列出类型声明 | /imports | 列出导入的项 | /exit [<integer-expression-snippet>] | 退出 jshell 工具 | /env [-class-path <路径>] [-module-path <路径>] [-add-modules <模块>] ... | 查看或更改评估上下文 | /reset [-class-path <路径>] [-module-path <路径>] [-add-modules <模块>]... | 重置 jshell 工具 | /reload [-restore] [-quiet] [-class-path <路径>] [-module-path <路径>]... | 重置和重放相关历史记录 -- 当前历史记录或上一个历史记录 (-restore) | /history | 您键入的内容的历史记录 | /help [<command>|<subject>] | 获取有关使用 jshell 工具的信息 | /set editor|start|feedback|mode|prompt|truncation|format ... | 设置配置信息 | /? [<command>|<subject>] | 获取有关使用 jshell 工具的信息 | /! | 重新运行上一个片段 -- 请参阅 /help rerun | /<id> | 按 ID 或 ID 范围重新运行片段 -- 参见 /help rerun | /-<n> | 重新运行以前的第 n 个片段 -- 请参阅 /help rerun | | 有关详细信息, 请键入 '/help', 后跟 | 命令或主题的名称。 | 例如 '/help /list' 或 '/help intro'。主题: | | intro | jshell 工具的简介 | id | 片段 ID 以及如何使用它们的说明 | shortcuts | 片段和命令输入提示, 信息访问以及 | 自动代码生成的按键说明 | context | /env /reload 和 /reset 的评估上下文选项的说明 | rerun | 重新评估以前输入片段的方法的说明
退出 jshell
退出 jshell 有些复杂,而且有些反人类,别人家的都是直接输入 exit
或 exit()
就可以了, jshell 竟然是输入 /exit
jshell> /exit | 再见 [yufei@www.twle.cn ~]$
注意,千万不要遗漏了那个 /