Java jshell在抛出异常后继续执行我的脚本。如何让它停止?

Java jshell在抛出异常后继续执行我的脚本。如何让它停止?,java,java-9,jshell,Java,Java 9,Jshell,我试着写一些jshell脚本。当抛出异常时,jshell仍然继续执行下一行 如何使脚本的行为更像普通java程序 Edit:我只是像jshell SCR.jsh那样运行它 使用throw new Exception()或1/0不会阻止执行下一行 脚本包含如下语句: System.out.println(1/0) System.out.println("foo") /exit 我认为第二行是无法到达的。这正是我所期望的。但是在打印异常之后,foo也会被打印。最后我想我找到了一个解决方法: {

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

如何使脚本的行为更像普通java程序

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

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

脚本包含如下语句:

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

我认为第二行是无法到达的。这正是我所期望的。但是在打印异常之后,
foo
也会被打印。

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

{
    System.out.println(1/0);
    System.out.println("foo");
}
/exit
现在它更接近于熟悉的java代码


异常不仅可以按预期工作,而且在块内分号也是必需的。

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

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

1
a
x -> x+1
(String s) -> s.length()
以及具有副作用的表达式,例如赋值和 方法调用

System.out.println("Hello world");
new BufferedReader(new InputStreamReader(System.in))
因此,即使其中一个代码段抛出异常,其他代码段也必须遵循(REPL)模式。As还将代码转换为语句块,将其标记为单个
片段
,当抛出
java.lang.arithmetricException
时,该片段将标记其完成

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

声明片段(
ClassDeclaration
InterfaceDeclaration
MethodDeclaration
,或
FieldDeclaration
)是一个显式 引入可由其他代码段引用的名称


此问题将受益于演示问题行为的示例。最好查看问题的答案。寻求调试帮助的问题(“为什么此代码不工作?”)必须包括所需的行为、特定问题或错误以及在问题本身中重现此问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参见:如何创建。使用“编辑”链接改进您的问题-不要通过评论添加更多信息。谢谢