java - JDK 的这段摘录是如何编译的?

标签 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 并将其回溯。我不明白什么?

最佳答案

你不明白的是,编译器只检查已检查的异常,即派生自Exception 的异常,不包括派生自RuntimeException 的异常。来自层次结构中从 Throwable 开始的其他地方的异常不受编译规则的约束。

关于java - JDK 的这段摘录是如何编译的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20037622/

相关文章:

java - 无法将 javafx.scene.control.TextField 设置为字段 'user'

c# - 将击键从 C# 应用程序发送到 Java 应用程序 - 奇怪的行为?

java - @Async with CompletableFuture#get 不会抛出自定义 RuntimeException

java - 抛出 ClassCast 异常

c# - 在语句执行期间测试堆栈展开

java - 连接变量参数列表

java - OpenJDK JVM 是否与 Oracle Java SE JVM 相同?

java - 将 java web 服务 json 消费到 Angular 4 中

java - 枚举被 JVM 视为迭代器

java - 在java中创建一个动态类