8

Javaでは、チェックされていない例外がtryブロックでキャッチされる可能性があると言われましたが、キャッチされた場合、それはチェックされた例外と呼ばれませんか?

4

3 に答える 3

14

チェックされていない例外は、try-catchブロックでキャッチする必要のない例外です。チェックされていない例外は、RuntimeExceptionまたはErrorクラスのサブクラスです。

tryチェックされた例外は、 -catchブロックでキャッチする必要がある例外です。

チェックされた例外とチェックされていない例外の定義は、セクション11.2:Java言語仕様の例外のコンパイル時チェックにあります。

チェックされていない例外クラスは、クラスRuntimeExceptionとそのサブクラス、およびクラスErrorとそのサブクラスです。他のすべての例外クラスは、チェックされた例外クラスです。

チェックされていない例外がcatchブロックでキャッチされたからといって、それがチェックされた例外になるわけではありません。つまり、チェックされていない例外がキャッチされ、catchブロックで処理されたことを意味します。

catchチェックされていない例外が発生し、次に新しいチェックされた例外が発生する可能throw性があるため、チェックされていない例外が発生する可能性があるそのメソッドを呼び出すメソッドは、それを呼び出すメソッドに何らかの例外を処理させます。

たとえば、メソッドに対してNumberFormatException解析できないものを処理するときにスローされる可能性があるaは、チェックされていない例外であるため、キャッチする必要はありません。ただし、そのメソッドを呼び出すメソッドは、呼び出し元にそのような問題を適切に処理させたい場合があるため、チェックされる別の例外をスローする可能性があります(。のサブクラスではありません)。StringInteger.parseIntRuntimeException

public int getIntegerFromInput(String s) throws BadInputException {
    int i = 0;
    try {
        i = Integer.parseInt(s);
    catch (NumberFormatException e) {
        throw new BadInputException();
    }

    return i;
}

上記の例では、aが-ブロックでNumberFormatExceptionキャッチされ、 new (チェックされた例外となることを目的としています)がスローされます。trycatchBadInputException

メソッドの呼び出し元は、getIntegerFromInputをキャッチするように強制されBadInputException、不正な入力を処理するように強制されます。NumberFormatExceptionがキャッチされて処理されない場合、このメソッドの呼び出し元は例外を正しく処理する必要があります。

(また、例外を食べて、実際には意味のないことを行うことは、良い習慣とは見なされないことに注意してください。意味のある例外処理を実行できる場合は、例外を処理してください。)

Javaチュートリアルから:

于 2009-06-26T23:48:42.970 に答える
4

いいえ、キャッチされたという理由だけでチェック例外とは呼ばれません。あらゆる種類の例外またはエラーをキャッチするために、catchブロックを作成できます。チェックされた例外は、 CatchまたはSpecify Requirementの対象となる例外です。つまり、それらをキャッチするか、メソッドがそれらをスローする可能性があることを宣言する必要があります。チェックされたという用語は、コンパイラーがキャッチまたは指定要件に準拠していることを確認するためにチェックすることを意味すると考えることができます。エラーとRuntimeExceptionsは、コンパイラーがこの要件を強制しないため、未チェックの例外と呼ばれます。

于 2009-06-27T00:00:15.410 に答える
1

違いは、コンパイラがキャッチされていないチェック例外と、チェック例外をスローするメソッドにフラグを立てるが、コンパイル時にメソッドシグネチャでそれらを宣言しないことだと思います。

チェックされていない例外は、宣言やキャッチを必要としませんが、どちらも禁止されていません。コンパイラはそれらをエラーとして識別しません。

于 2009-06-26T23:54:36.327 に答える