2

ファイルは java.nio.channels.SocketChannel.java です。JDK7u45。抜粋は次のとおりです。

public static SocketChannel open(SocketAddress remote)
    throws IOException
{
    SocketChannel sc = open();
    try {
        sc.connect(remote);
    } catch (Throwable x) {
        try {
            sc.close();
        } catch (Throwable suppressed) {
            x.addSuppressed(suppressed);
        }
        throw x;
    }
    assert sc.isConnected();
    return sc;
}

コンパイラはどのようにそのコードを渡しましたか? 署名はIOExceptionを宣言しますが、メソッドの本体はThrowableをキャッチしてそれを取り消します。何がわからないのですか?

4

1 に答える 1

1

あなたが理解していないのは、コンパイラがチェックされた例外のみをチェックすることです。つまり、から派生したExceptionものを除外することから派生したものRuntimeExceptionです。で始まる階層内の他の場所からの例外は、Throwableコンパイル規則の対象ではありません。

于 2013-11-17T23:51:37.187 に答える