文件是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
并将其回溯。我不明白什么?
最佳答案
你不明白的是,编译器只检查已检查的异常,即派生自Exception
的异常,不包括派生自RuntimeException
的异常。来自层次结构中从 Throwable
开始的其他地方的异常不受编译规则的约束。
关于java - JDK 的这段摘录是如何编译的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20037622/