Java 9 中的 REPL 有哪些不同的状态?

javaobject oriented programmingprogramming更新于 2025/9/25 19:56:17

REPL 代表 Read-Evaluate-Print-Loop。它包含一些状态,JShell 中的每个语句都有一个状态。此状态拒绝执行代码片段和变量的状态。它可以通过 JShell  实例的 eval() 方法的结果来确定,该方法评估代码。

下面列出了七种不同的状态。

  • DROPPED:代码片段处于非活动状态。
  • NONEXISTENT:代码片段处于非活动状态,因为它尚不存在。
  • OVERWRITTEN:代码片段处于非活动状态,因为它已被新代码片段替换。
  • RECOVERABLE_DEFINED:代码片段是一个声明片段,其主体中可能存在可恢复的未解析引用或其他问题。
  • RECOVERABLE_NOT_DEFINED:代码片段是一个声明具有可能可恢复的未解决引用或其他问题的代码片段。
  • 已拒绝:该代码片段处于非活动状态,因为编译在初始评估时失败,并且无法通过对 JShell 状态进行进一步更改而变得有效。
  • 有效:该代码片段是有效的代码片段。

示例

import java.util.List;
import jdk.jshell.*;
import jdk.jshell.Snippet.Status;

public class JShellTest {
   public static void main(String args[]) {
      JShell shell = JShell.create();
      List<SnippetEvent> events = shell.eval("int a, b, sum; " + "a = 12; b = 11; sum = a + b; " +
                                             "System.out.println(sum);" );
      for(SnippetEvent event : events) {
         Snippet snippet = event.snippet();
         Snippet.Status snippetstatus = shell.status(snippet);
         if(snippetstatus == Status.VALID) {
            System.out.println("Successfully executed");
         }
      }
   }
}

输出

Successfully executed
Successfully executed
Successfully executed  

相关文章


有用资源