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

标签 java java-9 jshell

我尝试编写一些 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, or FieldDeclaration) 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/

相关文章:

java - 尝试在 Eclipse Oxygen 中的 java 中使用 jdk.incubator.http.HttpClient 时出现 NoClassDefFoundError

Java eclipse,为什么JVM崩溃?

java - 这个LimitedInputStream正确吗?

java - 警告 : An illegal reflective access operation has occurred (portable opencv in java)

java - 如何在 jshell 中使用/设置截断命令中的选择器?

java - 如果用户尝试获取有错误的脚本,jshell 会静默结束

java - java中将值添加到数组中并找到最大的一个

java - Android hashmap按钮id

java - JDK 14 没有 rt.jar。那么引导类在哪里?

java - Tomcat 7.0.73 不适用于 java 9