如何从SDK中摘录编译?

时间:2013-11-17 23:30:57

标签: java exception java-7 checked-exceptions

该文件是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 并进行回溯。我不懂什么?

1 个答案:

答案 0 :(得分:1)

您不理解的是编译器仅检查已检查的异常,即从Exception派生的异常,不包括从RuntimeException派生的异常。来自Throwable层次结构中其他位置的异常不受编译规则的约束。