Groovy catch语句奇怪的行为

Mau*_*cio 4 groovy exception

我有以下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样式和语言功能指南的"捕获任何异常"部分.