抛出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
标记其完成。
理想情况下,这些语句应该被定义为声明片段 。
声明片段(
ClassDeclaration
,InterfaceDeclaration
,MethodDeclaration
或FieldDeclaration
)是一个片段,它明确地引入了可由其他片段引用的名称。
最后我想我找到了一个解决方法:
{ System.out.println(1/0); System.out.println("foo"); } /exit
现在它更接近熟悉的java代码。
不仅exception按预期工作,而且在块内部也需要分号。