我尝试编写一些 jshell 脚本。当抛出异常时,jshell 仍然继续执行下一行。
如何让我的脚本表现得更像普通的 Java 程序?
编辑:我只是像 jshell SCR.jsh
一样运行它。
使用throw new Exception()
或1/0
不会阻止下一行的执行。
脚本包含这样的语句:
System.out.println(1/0)
System.out.println("foo")
/exit
我以为第二行是不可达的。这就是我所期望的。但是在异常被打印出来之后,foo
也被打印出来了。
最佳答案
据我了解,jshell
即使在抛出异常后仍执行脚本中所有行的原因是因为它将您的脚本视为 Snippet
的列表| .
All expressions are accepted as snippets. This includes expressions without side effects, such as constants, variable accesses, and lambda expressions:
1 a x -> x+1 (String s) -> s.length()
as well as expressions with side effects, such as assignments and method invocations
System.out.println("Hello world"); new BufferedReader(new InputStreamReader(System.in))
因此,即使其中一个片段抛出异常,其他片段也必须遵循 Read-Eval-Print Loop (REPL) 模式。同样answered yourself将代码转换为语句 block 将其标记为单个 Snippet
,当抛出 java.lang.ArithmeticException
时标记其完成。
尽管理想情况下,此类语句应该定义为声明片段。
A declaration snippet (
ClassDeclaration
,InterfaceDeclaration
,MethodDeclaration
, orFieldDeclaration
) is a snippet that explicitly introduces a name that can be referred to by other snippets.
关于java - 抛出异常后,jshell 继续执行我的脚本。如何让它停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46357465/