Java jshell在抛出异常后继续执行我的脚本。如何让它停止?
我试着写一些jshell脚本。当抛出异常时,jshell仍然继续执行下一行 如何使脚本的行为更像普通java程序 Edit:我只是像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 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
)是一个显式
引入可由其他代码段引用的名称
此问题将受益于演示问题行为的示例。最好查看问题的答案。寻求调试帮助的问题(“为什么此代码不工作?”)必须包括所需的行为、特定问题或错误以及在问题本身中重现此问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参见:如何创建。使用“编辑”链接改进您的问题-不要通过评论添加更多信息。谢谢