http://docs.oracle.com/javase/7/docs/technotes/guides/language/catch-multiple.html#multiple
处理多种异常类型的 catch 块不会在编译器生成的字节码中产生重复;字节码没有异常处理程序的复制。
如果代码如下所示:
class FooExcn extends Exception { ... }
class BarExcn extends Exception { ... }
class Fred {
void log(FooExcn f) { /* calls FooExcn-specific methods */ }
void log(BarExcn b) { /* calls BarExcn-specific methods */ }
void test() {
try { }
catch (FooExcn | BarExcn ex) {
log(ex);
/* do other stuff */
}
}
}
似乎 catch 块的字节码取决于异常的类型,因此必须重复,每个捕获的 excn 类型一次。