Oracleのドキュメントによると、新しい multi-catch ブロックの注目すべき点は次のとおりです。
catch (IOException|SQLException ex) {
logger.log(ex);
throw ex;
}
catch ブロックが複数の例外タイプを処理する場合、 catch パラメーターは暗黙的に finalになります。この例では、catch パラメーター ex は final であるため、catch ブロック内でそれに値を割り当てることはできません。複数の例外タイプを処理する catch ブロックをコンパイルして生成されたバイトコードは、それぞれ 1 つの例外タイプのみを処理する多くの catch ブロックをコンパイルするよりも小さくなります (したがって優れています)。複数の例外タイプを処理する catch ブロックは、コンパイラによって生成されるバイトコードに重複を作成しません。バイトコードには例外ハンドラの複製がありません。
例外を別の方法で処理できる場合は、それらを個別にキャッチする必要があると思います。例外処理が複数の例外で同じである場合は、multi-catch ブロックを使用できます。
try{//whatever}
catch(A ex){//do something specific for A}
catch(B ex){//do something specific for B}
try{//whatever}
catch(C ex){
//C is superclass of A and B and you are not concerned about the specific type
// will catch even other exceptions which are instanceof C
}
try{//whatever}
catch(A|B ex){//do the same thing for both A and B}