原文: https://javatutorial.net/java-9-jshell-example

本教程说明了如何在 Java 9 中使用 JShell 工具

JShell 工具(也称为 REPL(读取评估打印循环))使您能够执行 Java 代码,并立即获得结果。 您可以快速评估表达式或简短的算法,而无需创建,编译或构建新项目。 借助 JShell,您可以执行表达式,使用导入,定义类,方法和变量以及使用导入。 请注意,JShell 是 Java 9 JDK 的一部分,而不是 JRE。

启动 JShell

打开控制台或终端(取决于您的操作系统)。 浏览到 Java 9 JDK 安装文件夹,然后将cd放入/bin文件夹。 运行 jshell 可执行文件 – jshell.exe(如果在 Windows OS 上运行)

Java 9 JShell 示例 - 图1

启动 JShell

简单的算术运算

使用 JShell,您可以通过将其输入为数学表达式来轻松测试算术运算。 以下示例演示了此概念。 您无需将分号(;)放在行尾

Java 9 JShell 示例 - 图2

JShell 算术运算

注意37/2 = 18的输出。之所以发生这种情况,是因为 JShell 将 37 视为Integer,因此结果强制转换为(int)。 将小数点加到 37 将产生Double结果

JShell 内部变量

JShell 通过打印输入结果为您提供即时反馈。 例如:

  1. jshell> 1 + 3
  2. $1 ==> 4

表达式1 + 3的结果为 4。JShell 还将此值分配给内部变量$1。 进一步的命令被分配给递增的$变量,例如$2$3等。

以下屏幕截图演示了 JShell 内部变量的用法:

Java 9 JShell 示例 - 图3

jshell 内部变量

您可以通过输入内部变量的名称来打印它的值,如下所示:

  1. jshell> $1
  2. $1 ==> 4

您可以为内部变量分配一个新值:

  1. jshell> $1 = 20
  2. $1 ==> 20

表达式1 + 3会生成一个整数,对吗? 那么,如果您尝试为不同类型的内部变量分配值,会发生什么? 让我们尝试为$1变量赋双精度值 15.8

  1. jshell> $1 = 15.8

如您在上面的屏幕截图中所见,这解决了“不兼容的类型错误”。 创建内部变量后,无法再更改类型。

内部变量不仅用于存储基本类型。 它们还可以处理对象。 在以下示例中,我们创建一个String类型的内部变量:

  1. jshell> new String("Hello")
  2. $4 ==> "Hello"

JShell 自动补全

JShell 具有内置的自动补全功能(也称为 Tab 补全功能),通过该功能,您只需按 Tab 键就可以最小化键入。 开始键入并按 Tab 键。 这将完成您开始键入的单词(如果只有一个选项可用)或显示可能的选项列表。 看下面的例子。 我们开始输入Str,然后按 Tab 键:

Java 9 JShell 示例 - 图4

jshell 自动补全功能

JShell 自定义导入

默认情况下,以下软件包被导入到 JShell 中:

  • java.io. *
  • java.math.*
  • java.net.*
  • java.nio.file.*
  • java.util.*
  • java.util.concurrent.*
  • java.util.function.*
  • java.util.prefs.*
  • java.util.regex.*
  • java.util.stream.*

提示:您可以使用/imports命令列出导入

您可以轻松导入 Java SE 中的软件包。 如果要查找软件包名称,请检查官方 Java 9 SE javadoc 网站

下面的示例演示如何导入java.time.LocalDate以创建新的LocalDate对象

Java 9 JShell 示例 - 图5

jshell 定制导入

JShell 示例程序

测试List反向方法的典型 Java 类如下所示:

  1. import java.util.Arrays;
  2. import java.util.Collections;
  3. import java.util.List;
  4. public class ListUtils {
  5. public static void main(String[] args) {
  6. List<String> list = Arrays.asList("A", "B", "C");
  7. System.out.println(reverse(list));
  8. }
  9. public static List<String> reverse(List<String> list) {
  10. List<String> listCopy = list.subList(0, list.size());
  11. Collections.reverse(listCopy);
  12. return listCopy;
  13. }
  14. }

上面显示的代码具有导入,main方法和System.out.println()来显示结果。 我们可以在 JShell 中跳过所有 3 个。 这就是我们可以使用 JShell 测试相同功能的方法:

Java 9 JShell 示例 - 图6

jshell 的例子

您将在上面的示例中注意到,我们照常创建类。 此外,我们的输入列表是在类之外创建的。 创建列表后查看立即输出,显示其值

  1. list ==> [A, B, C]

现在我们只在类中调用Utility方法

  1. jshell> ListUtils.reverse(list)

并显示结果输出:

  1. $3 ==> [C, B, A]

如何退出 JShell

您可以随时输入以下内容退出 jshell

  1. jshell> /exit

或按Ctrl + C

您在此处找到的许多教程都是基于 Edward Lavieri 博士和 Peter Verhas 撰写的 Mastering Java 9 。 本书将为您提供对 Java 9 新概念和工具的完整而深刻的理解。

如果您喜欢我的帖子或有任何问题/建议/类型错误,请给我评论。

感谢您阅读我的教程。

Java SE 9 学习愉快!