Java 9中的REPL
REPL指的是"Read-Eval-Print Loop"即读取-求值-打印循环,是一种编程环境,可以让用户输入代码并立即看到结果。Java 9中引入了一个名为JShell的REPL工具,可以让Java开发人员更方便地探索和学习Java语言的特性。在JShell中,开发人员可以在没有编写完整Java应用程序的情况下执行独立的Java语句。
不同状态
JShell在执行Java语句时有几种不同的状态,这些状态在交互式环境中都有不同的含义。
状态1:开始状态
当您第一次启动JShell时,您将进入JShell的初始状态。在此状态下,您可以输入任何有效的Java语句,例如变量申明和表达式。
jshell> int x = 5;
x ==> 5
在上面的示例中,我们在JShell中定义了一个名为x的整数变量,并将其赋值为5。JShell会显示变量x的值,因为我们没有在语句末尾使用分号来禁止输出。
状态2:表达式状态
在JShell中,您可以进入表达式状态,以便评估和显示表达式的值。
jshell> /set mode EXPRESSION
| 已设置为: EXPRESSION
jshell> 3 + 4
$1 ==> 7
jshell> "hello, world"
$2 ==> "hello, world"
在上面的示例中,我们使用JShell的/set mode命令来将其模式更改为表达式模式。然后,我们输入了两个不同的表达式:一个加法表达式和一个字符串。
在表达式模式下,如果您没有在语句结尾处使用分号,JShell将显示表达式的结果。
状态3:多行状态
在JShell中,有时您需要编写多行Java代码,而不仅仅是单个语句。JShell使这变得容易。
jshell> /set mode MULTI_LINE
| 已设置为: MULTI_LINE
jshell> String json = "{\n" +
... " \"firstName\": \"John\",\n" +
... " \"lastName\": \"Doe\",\n" +
... " \"age\": 25\n" +
... "}";
json ==> "{\n \"firstName\": \"John\",\n \"lastName\": \"Doe\",\n \"age\": 25\n}"
在上面的示例中,我们使用JShell的/set mode命令将其模式更改为多行模式。然后,我们使用一个名为json的字符串变量来存储一个包含JSON字符串的值。
请注意,每行代码的结尾都有一个加号。这告诉JShell您正在编写多行代码,而不是一个单独的语句。
状态4:编辑状态
在JShell中,您可以进入编辑模式,以便编辑之前输入的代码。
jshell> /edit $1
在编辑模式下,您可以使用常规编辑器命令编辑文本。例如,在大多数编辑器中,您可以使用Ctrl + A选择所有文本,然后使用Ctrl + X剪切该文本,以便您可以将其粘贴到其他地方。
状态5:继续状态
如果您输入的Java代码需要添加更多内容,但当前状态不允许这样,JShell将显示一个“continue?”提示。
jshell> if (x != 5)
... {
... System.out.println("x is not 5");
... }
| 缺少 '}',请使用 ';' 继续
jshell> ;
在上面的示例中,我们输入了一个if语句,但JShell无法使用该多行模式,因此我们看到了一个继续提示。总是使用semicolon (;)来告诉JShell您想要完成之前输入的语句。
综上所述,JShell中的不同状态都有其各自的含义,开发人员可以利用它们来更方便地学习和探索Java语言的特性。