我有以下2个groovy片段应该做同样但但他们不会。
try {
throw new RuntimeException()
} catch (IllegalStateException) {
println("hello!")
}
此'hello!'
try {
throw new RuntimeException()
} catch (IllegalStateException e) {
println("hello!")
}
此输出是一个意外的例外:
Caught: java.lang.RuntimeException
java.lang.RuntimeException
at 2.run(2.groovy:2)
请注意唯一的区别是,在一个代码段中,catch块中没有e
参数。
我正在运行以下版本的groovy和JVM。
groovy --version
Groovy Version: 2.0.5 JVM: 1.6.0_37 Vendor: Sun Microsystems Inc. OS: Linux
这是预期的行为还是编译器中的错误? 感谢
答案 0 :(得分:11)
在第一种情况下,您引入了名为IllegalStateException
的变量。它相当于:
try {
throw new RuntimeException()
} catch (Exception IllegalStateException) {
println("hello!")
}
在第二种情况下,你只捕获IllegalStateException
,这不是抛出异常的类型,因此catch
块不会捕获它
等同于C#的意思,你只是想说你只想抓住IllegalStateException
,但你不需要变量就可以了。关心异常对象。
请参阅Groovy style and language feature guidelines for Java developers文档中的“捕获任何异常”部分。
答案 1 :(得分:0)
在第二种情况下,您没有捕获抛出的异常;所以行为是预期的。在第一种情况下,'异常'是分配给抛出的异常的变量。打印出来,你就会看到它" java.lang.RuntimeException"。