📜  JShell(Java 9 新特性)

📅  最后修改于: 2022-05-13 01:54:29.077000             🧑  作者: Mango

JShell(Java 9 新特性)

JShell简介
Java Shell 工具 (JShell) 是一种交互式工具,用于学习Java编程语言和原型化Java代码。 JShell 是一个读取-评估-打印循环 (REPL),它在输入声明、语句和表达式时对其进行评估并立即显示结果。该工具从命令行运行。 JShell 是在Java 9 中引入的,因此不能在Java 8 中使用。

为什么使用 JShell?
Jshell 减少了运行Java程序和测试业务逻辑所需的所有工作量。如果我们不使用 Jshell,创建Java程序涉及以下步骤。

  1. 打开编辑器并编写程序
  2. 保存程序
  3. 编译程序
  4. 如果有任何编译时错误,请编辑
  5. 运行程序
  6. 如果有任何运行时错误,请编辑
  7. 重复该过程

Jshell 不需要上述步骤。我们可以评估语句、方法和类,甚至可以在不创建类的情况下编写 hello 程序。
JShell 可帮助您在开发程序时尝试代码并轻松探索选项。您可以测试单个语句,尝试不同的方法变体,并在 JShell 会话中试验不熟悉的 API。 JShell 不会取代 IDE。在开发程序时,将代码粘贴到 JShell 中进行试用,然后将工作代码从 JShell 粘贴到程序编辑器或 IDE 中。

启动和停止 JShell
要启动 Jshell,首先我们必须安装Java 9,然后在 Linux 中打开终端或在 Windows 中打开命令提示符并键入 jshell。它将启动 jshell 会话并向控制台显示欢迎消息。

你好Java消息

要显示简单的“Hello Java”消息,请在不创建类的情况下编写打印命令并按 Enter。

要退出 JShell,请输入命令:

jshell> /exit
|  Goodbye

片段
JShell 接受Java语句;变量、方法和类定义;进口;和表达式。这些Java代码片段称为片段。
在提示符处输入以下示例语句,并查看显示的输出:

jshell> int x = 11
x ==> 11
|  created variable x : int

首先,显示结果。将其读作:变量 x 的值为 45。因为您处于详细模式,所以还会显示对所发生情况的描述。信息性消息以竖线开头。请注意,已显示变量的名称和类型。
当输入一个没有命名变量的表达式时,会创建一个临时变量,以便以后可以引用该值。以下示例显示了表达式和方法结果的临时值。该示例还显示了在片段需要多行输入才能完成时使用的继续提示 (...>):

jshell> 8 + 8
$3 ==> 16
|  created scratch variable $3 : int

jshell> String double(String s) {
   ...>    return s + s;
   ...> }
|  created method double(String)

jshell> double("Geeks")
$5 ==> "GeeksGeeks"
|  created scratch variable $5 : String

例外
在异常回溯中,反馈标识代码段和代码段中发生异常的位置。

输入到 JShell 的代码中的位置显示为 #ID:line-number,其中代码片段 ID 是 /list 命令显示的编号,行号是代码片段中的行号。在以下示例中,异常发生在片段 1 中,即方法第二行的 divide() 方法中:

jshell> int half(int x, int y) {
   ...> return x / y;
   ...> }
|  created method divide(int,int)

jshell> divide(5, 0)
|  java.lang.ArithmeticException thrown: / by zero
|        at divide (#1:2)
|        at (#2:1)
                             
jshell> /list
                                                            
   1 : int divide(int x, int y) {
           return x / y;
       }
   2 : divide(5, 0)

命令简介
JShell 命令控制环境并在会话中显示信息。

命令通过前导正斜杠 (/) 与片段区分开来。有关当前变量、方法和类型的信息,请使用 /vars、/methods 和 /types 命令。对于输入的片段列表,请使用 /list 命令。以下示例基于示例显示这些命令

jshell> /vars
|    int x = 8
|    int $3 = 16
|    String $5 = "GeeksGeeks"

jshell> /methods
|    double(String)String

jshell> /list

   1 : System.out.println("Hi");
   2 : int x = 8;
   3 : 8 + 8
   4 : String double(String s) {
         return s + s;
       }
   5 : double("Ocean")

请注意,显示了变量的类型和值以及方法的类型签名。

JShell 有一个默认的启动脚本,它会在 JShell 启动之前静默自动执行,以便您快速开始工作。除非您使用 /list -start 或 /list -all 命令请求它们,否则不会列出启动脚本中的条目:

jshell> /list -all

  s1 : import java.util.*;
  s2 : import java.io.*;
  s3 : import java.math.*;
  s4 : import java.net.*;
  s5 : import java.util.concurrent.*;
  s6 : import java.util.prefs.*;
  s7 : import java.util.regex.*;
   1 : System.out.println("Hi");
   2 : int x = 8;
   3 : 8 + 8
   4 : String double(String s) {
         return s + s;
       }
   5 : double("GeeksGeeks")

默认启动脚本包含几个常见的导入。您可以使用 /set start 命令个性化您的启动条目。有关此命令的信息,请输入 /help /set start。 /save -start 命令将当前启动脚本保存为您自己的启动脚本的起点。

其他重要的命令包括退出 JShell 的 /exit、保存代码片段的 /save 和输入文件中的代码片段的 /open。

输入 /help 以获取 JShell 命令列表。

参考资料——https://docs.oracle.com/javase/9/tools/jshell.htm