我尝试编写一些jshell脚本。抛出异常时,jshell仍继续执行下一行。
如何让我的脚本更像普通的java程序?
编辑 :我只是像jshell SCR.jsh
一样运行。
使用throw new Exception()
或1/0
并不会阻止下一行被执行。
该脚本包含如下语句:
System.out.println(1/0)
System.out.println("foo")
/exit
我认为第二行无法访问。这就是我的预期。但是在打印例外后,也会打印foo
。
答案 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
时标记其完成。
虽然理想情况下应将此类陈述定义为声明代码段。
宣言摘要(
ClassDeclaration
,InterfaceDeclaration
,MethodDeclaration
或FieldDeclaration
)是一个明确的片段 引入了一个可以被其他片段引用的名称。
答案 1 :(得分:2)
最后我想我找到了一个解决方法:
{
System.out.println(1/0);
System.out.println("foo");
}
/exit
现在它更接近熟悉的java代码。
不仅异常按预期工作,而且在块内也需要分号。