抛出exception后,jshell继续执行我的脚本。 如何让它停止?

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

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

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

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

该脚本包括如下语句:

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

我以为第二行无法访问。 这就是我的预期。 但是在打印exception后,还会打印foo

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

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

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

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

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

因此,即使其中一个代码段引发exception,其他代码也必须遵循Read-Eval-Print Loop (REPL)模式。 正如回答自己将代码转换为语句块一样,它将它标记为单个Snippet ,当抛出java.lang.ArithmeticException标记其完成。

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

声明片段( ClassDeclarationInterfaceDeclarationMethodDeclarationFieldDeclaration )是一个片段,它明确地引入了可由其他片段引用的名称。

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

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

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

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