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

时间:2017-09-22 05:32:12

标签: java java-9 jshell

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

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

编辑 :我只是像jshell SCR.jsh一样运行。

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

该脚本包含如下语句:

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

我认为第二行无法访问。这就是我的预期。但是在打印例外后,也会打印foo

2 个答案:

答案 0 :(得分:5)

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

  

所有表达式都被接受为片段。这包括表达式   没有副作用,例如常量,变量访问和lambda   表达式:

1
a
x -> x+1
(String s) -> s.length()
     

以及带有副作用的表达式,例如赋值和   方法调用

System.out.println("Hello world");
new BufferedReader(new InputStreamReader(System.in))

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

虽然理想情况下应将此类陈述定义为声明代码段

  

宣言摘要(ClassDeclarationInterfaceDeclaration,   MethodDeclarationFieldDeclaration)是一个明确的片段   引入了一个可以被其他片段引用的名称。

答案 1 :(得分:2)

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

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

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

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