我有以下2个groovy片段,应该做同样但但他们没有.
try {
throw new RuntimeException()
} catch (IllegalStateException) {
println("hello!")
}
Run Code Online (Sandbox Code Playgroud)
这个输出 'hello!'
try {
throw new RuntimeException()
} catch (IllegalStateException e) {
println("hello!")
}
Run Code Online (Sandbox Code Playgroud)
而这个输出是一个意外的例外:
Caught: java.lang.RuntimeException
java.lang.RuntimeException
at 2.run(2.groovy:2)
Run Code Online (Sandbox Code Playgroud)
请注意唯一的区别是,在一个片段e中,catch块中没有参数.
我正在运行以下版本的groovy和JVM.
groovy --version
Groovy Version: 2.0.5 JVM: 1.6.0_37 Vendor: Sun Microsystems Inc. OS: Linux
这是预期的行为还是编译器中的错误?谢谢
Jon*_*eet 11
在第一种情况下,您将引入一个名为的变量IllegalStateException.它相当于:
try {
throw new RuntimeException()
} catch (Exception IllegalStateException) {
println("hello!")
}
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,你只是捕获IllegalStateException,这不是抛出异常的类型,因此catch块不会捕获它.
它不等同于C#的意思,你只是说你想要捕获IllegalStateException,但你不需要变量,因为你不关心异常对象.
有关Java开发人员文档,请参阅Groovy样式和语言功能指南的"捕获任何异常"部分.