4

Java 7以降を使用できることは知っていますがmulti-catch、以前のバージョンのJavaのように例外の順序が重要かどうか疑問に思いますか? たとえば、例外を入れてからSQLExceptionIOException?

try {
      // execute code that may throw 1 of the 3 exceptions below.

} catch(Exception | SQLException | IOException e) {   
    logger.log(e);

}

または、このようにする必要がありますか?

try {

    // execute code that may throw 1 of the 3 exceptions below.

} catch(SQLException | IOException e) {
    logger.log(e);

} catch(Exception e) {
    logger.severe(e);
}
4

6 に答える 6

5

はすでにそのサブクラスcatch(Exception | SQLException | IOException e)と.ExceptionIOExceptionSQLException

したがってcatch(Exception e)、これらすべての例外タイプに対して同じ処理を行いたい場合は、これで十分です。

より一般的な に対して異なる処理が必要な場合はException、2 番目のコード スニペットが理にかなっています。ここでは、より具体的な例外タイプを最初にキャッチする必要があるため、2 つの catch ブロックの順序が重要です。

于 2015-07-14T11:03:03.750 に答える
1

マルチ キャッチ機能は、2 つの異なる階層例外でコードの重複を削除するために Java で提供されます。この理由で使用している場合、順序は関係ありません。マルチキャッチブロックで親例外クラスExceptionをキャッチする場合、子例外IOException, SQLExceptionクラスを追加する必要はありません。

于 2015-07-14T11:26:30.653 に答える
0

multicatch Exceptiontypes は「OR」で区切られているため、順序は関係ありません。

とにかくすべての Exceptiontypes を同じ方法で処理する予定がある場合にのみ、マルチキャッチを使用する必要があります。その場合、順序は重要ではありません。

編集: 実際、型が階層的な行にある場合は、「代替」(この場合は一般的な例外) 型のみをキャッチする必要があります。ただし、これは彼らの順序とは何の関係もありません。

于 2015-07-14T11:02:06.447 に答える
0

最初に Exception をキャッチしようとして、2 番目のキャッチが IOException 用である場合、明らかに 2 番目のキャッチにヒットすることはないため、順序は重要です。したがって、順序は、最小の例外から最大の例外の順でなければなりません。

于 2015-07-14T11:05:42.067 に答える