该文件是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 并进行回溯。我不懂什么?
答案 0 :(得分:1)
您不理解的是编译器仅检查已检查的异常,即从Exception
派生的异常,不包括从RuntimeException
派生的异常。来自Throwable
层次结构中其他位置的异常不受编译规则的约束。