Java 简明教程

Java - REPL (JShell)

Introduction to REPL (JShell)

REPL 代表 Read Evaluate Print LoopJShell 在 Java 9 中引入,这是一种交互式控制台。JShell 作为 REPL,无需保存且允许在控制台中运行任意 Java 代码片段并执行 compile java code file 。此功能对于快速测试代码非常重要,例如评估 regular expression 、检查 strings 、日期格式等。

JShell 读取输入的每一行,评估并打印结果,然后再次准备下一组输入。

Advantages of Using JShell

JShell 的这一功能为开发人员提供了以下优势 -

  1. 无需编辑器来 write a Java program 。JShell 本身就作为编辑器并执行 Java 代码。

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

  3. 在执行代码之前不需要编译。

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

Running JShell

打开命令提示符并键入 jshell

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

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

Create and Invoke Method in JShell

以下代码段展示 JShell 中的一个示例“Hello World”程序。在这里,我们创建了一个包含一个语句来打印消息“Hello World!”的方法 greet()。然后,我们调用方法 greet(),结果打印到控制台上。

Hello World Example in JShell

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

jshell> greet()
Hello World!
jshell>

Creating Variables in JShell

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

Example

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"

Evaluate Expression in JShell

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

Example

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

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

Jshell Built-In Commands

JShell 提供了各种命令来列出已创建的变量、已创建的方法、已使用的导入等。其中一些重要的 JShell 命令有 -

  1. /drop – 此命令将按名称、ID 或 ID 范围删除标识的代码片段。

  2. /edit – 此命令将打开一个编辑器。

  3. /env – 此命令将显示环境设置。

  4. /exit – 此命令将从工具中退出。

  5. /history – 此命令将显示该工具的历史记录。

  6. /help – 此命令将显示命令的帮助。

  7. /imports – 此命令将显示当前活动导入。

Example: Demonstrating /help Command

我们可以使用 /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

...

Example: Demonstrating /vars Command

在以下示例中,我们使用 /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>

Example: Demonstrating /imports Command

我们可以使用 /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>

Exiting JShell

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

Example

jshell> /exit
|  Goodbye

C:\Users\Mahesh>