java - IOException 与 RuntimeException Java

标签 java exception exception-handling

class Y {
    public static void main(String[] args) throws RuntimeException{//Line 1
        try {
            doSomething();
        }
        catch (RuntimeException e) {
            System.out.println(e);
        }
    }
    static void doSomething() throws RuntimeException{ //Line 2
        if (Math.random() > 0.5) throw new RuntimeException(); //Line 3
        throw new IOException();//Line 4
    }
}

当我抛出两种类型的异常(第 4 行中的 IOException 和第 3 行中的 RunTimeException)时,我发现我的程序无法编译,直到我在第 1 行和第 2 行的 throws 子句中指明“IOException”。

而如果我反转“throws”以指示抛出 IOException,程序会编译成功,如下所示。

class Y {
    public static void main(String[] args) throws IOException {//Line1
        try {
            doSomething();
        }
        catch (RuntimeException e) {
            System.out.println(e);
        }
    }
    static void doSomething() throws IOException {//Line 2
        if (Math.random() > 0.5) throw new RuntimeException();//Line 3
        throw new IOException();//Line 4
    }
}

为什么我应该始终对 IOException 使用“throws”,即使 RuntimeException 也被抛出(第 3 行)?

最佳答案

因为IOException是Checked Exception,应该处理或者声明抛出。 相反,RuntimeException 是一个 Unchecked Exception。您不需要在方法 throws 子句中处理或声明它被抛出(这里我的意思是,如果您不处理未经检查的异常,它在语法上是正确的。编译器不会生气)。然而,在某些情况下,您需要针对某些未经检查的异常进行相应处理和操作。


相关帖子:

引用资料:

关于java - IOException 与 RuntimeException Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18416511/

相关文章:

java - 有异常的返回类型是好的编程吗?

java - Scala future 和 `andThen` 异常传播

c# - 从 App.config 获取连接字符串

java - 如何使用 Spring Data Rest 和 PagingAndSortingRepository 处理异常?

java - 线程安全单元测试

java - 为什么我的角色不是悬停就是从地板上掉下来?

java - 分页点击页面索引始终仅加载第一页

python - Python 中异常处理程序的成本

haskell - 如何捕获(并忽略)对错误函数的调用?

java - 检查几个正则表达式的字符串并说出哪个匹配