首页 文章

抛出异常后,jshell继续执行我的脚本 . 怎么让它停下来?

提问于
浏览
4

我尝试编写一些jshell脚本 . 抛出异常时,jshell仍继续执行下一行 .

如何让我的脚本更像普通的java程序?

Edit :我只是像 jshell SCR.jsh 一样运行它 .

使用 throw new Exception()1/0 不会阻止执行下一行 .

该脚本包含如下语句:

System.out.println(1/0)
System.out.println("foo")
/exit

我以为第二行无法访问 . 这就是我的预期 . 但是在打印异常后,也会打印 foo .

2 回答

  • 6

    根据我的理解,即使在抛出异常之后, jshell 也会执行脚本中所有行的原因是因为它将您的脚本视为Snippet的列表 .

    所有表达式都被接受为片段 . 这包括没有副作用的表达式,例如常量,变量访问和lambda表达式:1
    一个
    x - > x 1
    (String s) - > s.length()
    以及带有副作用的表达式,例如赋值和方法调用System.out.println(“Hello world”);
    新的BufferedReader(新的InputStreamReader(System.in))

    因此,即使其中一个代码段引发异常,其他代码也必须遵循 Read-Eval-Print Loop (REPL)模式 . 同样answered yourself将代码转换为语句块将其标记为单个 Snippet ,当它抛出 java.lang.ArithmeticException 时,标记其完成 .

    理想情况下,这些语句应该被定义为声明片段 .

    声明片段(ClassDeclaration,InterfaceDeclaration,MethodDeclaration或FieldDeclaration)是一个片段,它明确引入了其他片段可以引用的名称 .

  • 2

    最后我想我找到了一个解决方法:

    {
        System.out.println(1/0);
        System.out.println("foo");
    }
    /exit
    

    现在它更接近熟悉的java代码 .

    不仅异常按预期工作,而且在块内部也需要分号 .

相关问题