Java 为什么catch参数是隐式的final?

Java 为什么catch参数是隐式的final?,java,java-7,Java,Java 7,这里为什么ex是隐式的final?使ex隐式最终有什么用?它是隐式最终的,因为更改ex指向的对象对您来说没有意义,特别是在这种情况下,它可能是IOException或SQLException,因此(静态)编译器很难理解赋值类型。应该允许程序员更改ex指向的对象。通过更改ex指向的对象,我可以执行一些其他操作。如果执行ex,这将不可能final@Rekha如果不使用Java7风格的多捕获语法,您将被允许这样做。在这种情况下,您不能赋值,因为它不能是类型安全的。您能详细说明为什么它不能是类型安全的吗

这里为什么
ex
是隐式的final?使ex隐式最终有什么用?

它是隐式最终的,因为更改
ex
指向的对象对您来说没有意义,特别是在这种情况下,它可能是
IOException
SQLException
,因此(静态)编译器很难理解赋值类型。

应该允许程序员更改ex指向的对象。通过更改ex指向的对象,我可以执行一些其他操作。如果执行ex,这将不可能final@Rekha如果不使用Java7风格的多捕获语法,您将被允许这样做。在这种情况下,您不能赋值,因为它不能是类型安全的。您能详细说明为什么它不能是类型安全的吗safe@Rekha因为它可以是
IOException
SQLException
ex
的静态类型在编译时没有完全定义(可以是任意一种),只有在运行时才知道。在这个阶段,如果捕获到一个
IOException
并将
SQLException
分配给
ex
,您将破坏类型安全性。@Rekha您可以非常多地更改
ex
所指向的值(如果它是一个可变对象,但是更改捕获的异常不是一件常见的事情),你不能做的是改变ex指向什么,你也不需要改变,因为你可以创建一个新的局部变量,然后处理它而不是ex。
catch (IOException|SQLException ex) {
    logger.log(ex);
    throw ex;
}