Java 教程

Java 控制语句

面向对象编程

Java 内置类

Java 文件处理

Java 错误与异常

Java 多线程

Java 同步

Java 网络编程

Java 集合

Java 接口

Java 数据结构

Java 集合算法

高级 Java

Java 其他

Java API 与框架

Java 类参考

Java 有用资源

Java - REPL (JShell)



REPL (JShell) 简介

REPL 代表 Read Evaluate Print Loop(读取-求值-打印-循环)。JShell 是 Java 9 中引入的一个交互式控制台。JShell 作为 REPL 允许在控制台中运行任意 Java 代码片段,无需保存和编译 Java 代码文件。此功能对于快速测试代码非常重要,例如评估正则表达式,检查字符串的格式,日期格式等。

JShell 读取每一行输入,对其进行求值,然后打印结果,然后再次准备好接收下一组输入。

使用 JShell 的优势

JShell 的此功能为开发人员提供了以下优势:

  • 无需编辑器即可编写 Java 程序。JShell 本身充当编辑器并执行 Java 代码。

  • 使用 JShell,无需保存 Java 文件、编译和执行代码循环。代码可以直接在 JShell 中测试,无需保存任何内容。

  • 无需在执行代码之前进行编译。

  • 如果发生任何编译时或运行时错误,请重新开始。

运行 JShell

打开命令提示符并键入jshell

D:\test>jshell
|  Welcome to JShell -- Version 20.0.2
|  For an introduction type: /help intro

使用 JShell,我们还可以测试方法、类和表达式。在以下示例中,让我们探索 JShell 的一些功能。

在 JShell 中创建和调用方法

以下代码片段显示了 JShell 中的示例“Hello World”程序。在这里,我们创建了一个 greet() 方法,该方法只有一个语句用于打印消息“Hello World!”。接下来,我们调用了 greet() 方法,结果打印在控制台上。

JShell 中的 Hello World 示例

jshell> void greet() { System.out.println("Hello World!");}
|  created method greet()

jshell> greet()
Hello World!
jshell>

在 JShell 中创建变量

以下代码片段显示了如何在 JShell 中创建变量。分号是可选的。我们也可以在 JShell 中创建对象。如果未初始化变量,则如果它是对象引用,则赋予其默认值或 null。创建变量后,就可以使用它,如最后一条语句所示,我们使用字符串变量打印其值。

示例

jshell> int i = 10
i ==> 10

jshell> String name = "Mahesh";
name ==> "Mahesh"

jshell> Date date = new Date()
date ==> Fri Feb 02 14:52:49 IST 2024

jshell> long l
l ==> 0

jshell> List list
list ==> null

jshell> name
name ==> "Mahesh"

在 JShell 中求值表达式

以下代码片段显示了如何使用 JShell 求值表达式。在这里,我们传递了一个返回格式化字符串的语句。JShell 自动创建了一个 String 变量 $9 并为其赋值结果。在下一条语句中,我们进行了打印。

示例

jshell> String.format("%d pages read.", 10);
$9 ==> "10 pages read."

jshell> $9
$9 ==> "10 pages read."

JShell 内置命令

JShell 提供各种命令来列出创建的变量、创建的方法、使用的导入等。一些重要的 JShell 命令是:

  • /drop – 此命令删除由名称、ID 或 ID 范围标识的代码片段。
  • /edit – 此命令打开一个编辑器。
  • /env – 此命令显示环境设置。
  • /exit – 此命令退出工具。
  • /history – 此命令显示工具的历史记录。
  • /help – 此命令显示命令的帮助。
  • /imports – 此命令显示当前活动的导入。

示例:演示 /help 命令

我们可以使用/help选项查看所有命令。

jshell> /help
|  Type a Java language expression, statement, or declaration.
|  Or type one of the following commands:
|  /list [<name or id>|-all|-start]
|       list the source you have typed
|  /edit <name or id>
|       edit a source entry
|  /drop <name or id>
|       delete a source entry
|  /save [-all|-history|-start] <file>
|       Save snippet source to a file
|  /open <file>
|       open a file as source input
|  /vars [<name or id>|-all|-start]
|       list the declared variables and their values
|  /methods [<name or id>|-all|-start]
|       list the declared methods and their signatures
|  /types [<name or id>|-all|-start]
|       list the type declarations

...

示例:演示 /vars 命令

在下面的示例中,我们使用了/vars命令来打印在会话期间声明的变量。

C:\Users\Mahesh>jshell
|  Welcome to JShell -- Version 20.0.2
|  For an introduction type: /help intro

jshell> int i = 10
i ==> 10

jshell> String name="Mahesh"
name ==> "Mahesh"

jshell> /vars
|    int i = 10
|    String name = "Mahesh"

jshell>

示例:演示 /imports 命令

我们可以使用/imports命令检查 JShell 中可用的导入,如下所示

jshell> /imports
|    import java.io.*
|    import java.math.*
|    import java.net.*
|    import java.nio.file.*
|    import java.util.*
|    import java.util.concurrent.*
|    import java.util.function.*
|    import java.util.prefs.*
|    import java.util.regex.*
|    import java.util.stream.*

jshell>

退出 JShell

我们可以使用/exit命令退出 JShell,如下所示

示例

jshell> /exit
|  Goodbye

C:\Users\Mahesh>
广告