在 uni-catch 子句中,您可以自由地重新分配异常对象。例如,这工作正常:
try {
... // code that can throw IOException or some user-defined ParserException
} catch(IOException) {
e = new IOException(); // this is acceptable (although there is no point in doing it)
e.printStackTrace();
}
编译器确定抛出的对象的类型为 。但是,在多重捕获子句中,可以有如下内容:IOException
try {
... // code that can throw IOException or some user-defined ParserException
} catch(IOException | ParserException e) {
e = new IOException(); // this is NOT acceptable -- e may reference a ParserException
e.printStackTrace();
}
在这种情况下,编译器在编译时不知道异常的类型,因此将 new 分配给可以引用 或 不应允许的变量。除此之外,首先缺乏分配给异常变量的用例。因此,隐式地创建变量并避免所有这些混淆是完全有意义的。如果你真的需要赋值给变量,你可以切换到旧的块序列编写方式。IOException
IOException
ParseException
final
catch