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 タイプをキャッチするたびに複製する必要があります。