2

该文件是 java.nio.channels.SocketChannel.java。JDK 7u45。摘录如下:

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 回答