なぜそれがJavaでスローされた例外のキャッチサブタイプに許可されています

Mrbel:

私は、「Javaはあなたが潜在的にトライクラス本体によってスローすることができないチェック例外タイプのためにcatchブロックを宣言することはできません」という、Javaのブックに読みました。

それ作るには、これまでに感じます。

このコードはコンパイルを行い、なぜしかし、今、私は自分自身を求めています:

    try {
        throw new Exception();
    } catch (IOException e) {
    } catch (Exception e) {
    }

Javaは私がキャッチすることができますIOExceptionが、明らかにそれは、tryブロックでスローされることはありません。

この例では、Javaのマニュアルで説明するルールを破るませんか?

モーリス・ペリー:

それは、このコードを読み取るプログラマには明白ですが、私は扱うことをコンパイラ推測throw声明それがメソッドの呼び出しに対処するのと同じ方法で投げるとして宣言さExceptionれ、この場合には、スローされた例外は非常によく可能性がありIOException

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=222596&siteId=1