8

次の方法でInterruptedExceptionをスローできないのはなぜですか。

try {
    System.in.wait(5) //Just an example
} catch (InterruptedException exception) {
    exception.printStackTrace();
 //On this next line I am confused as to why it will not let me throw the exception
    throw exception;
}

http://java24hours.comにアクセスしましたが、InterruptedExceptionをスローできなかった理由がわかりませんでした。
誰かが理由を知っているなら、教えてください!私は絶望的です!:S

4

3 に答える 3

14

作成しているメソッドがスロー(または基本クラス)を宣言している場合にのみ、スローできます。InterruptedException

例えば:

public void valid() throws InterruptedException {
  try {
    System.in.wait(5) //Just an example
  } catch (InterruptedException exception) {
    exception.printStackTrace();
    throw exception;
  }
}

// Note the lack of a "throws" clause.
public void invalid() {
  try {
    System.in.wait(5) //Just an example
  } catch (InterruptedException exception) {
    exception.printStackTrace();
    throw exception;
  }
}

詳細については、チェックされた例外を確認する必要があります。

(これを言っても、ほぼ確実に呼び出すwait()ことSystem.inは、あなたが期待することをしていません...)

于 2010-05-28T17:31:28.463 に答える
3

Javaには、チェックされた例外とチェックされていない例外の2種類の例外があります。

チェックされた例外の場合、コンパイラは、プログラムがそれらをキャッチするか、例外が発生する可能性のあるメソッドを指定して(throws句を使用して)、そのメソッドがその種の例外をスローする可能性があるかどうかをチェックします。

java.lang.RuntimeException(およびそれ自体の)サブクラスである例外クラスは、RuntimeExceptionチェックされていない例外です。これらの例外については、コンパイラーはチェックを行いません。したがって、それらをキャッチしたり、スローする可能性があることを指定したりする必要はありません。

クラスInterruptedExceptionはチェックされた例外であるため、クラスをキャッチするか、メソッドがクラスをスローする可能性があることを宣言する必要があります。ブロックから例外をcatchスローしているので、メソッドが例外をスローする可能性があることを指定する必要があります。

public void invalid() throws InterruptedException {
    // ...

拡張する例外クラスjava.lang.ExceptionRuntimeExceptionおよびサブクラスを除く)は、チェックされた例外です。

詳細については、例外に関するSunのJavaチュートリアルを参照してください。

于 2010-05-28T17:39:53.453 に答える
0

InterruptedExceptionはRuntimeExceptionではないため、キャッチまたはチェックする必要があります(メソッドシグネチャのthrows句を使用)。RuntimeExceptionをスローすることのみが可能であり、コンパイラーによって強制的にキャッチすることはできません。

于 2010-05-28T17:33:33.250 に答える