【问题标题】:IOException vs RuntimeException JavaIOException 与 RuntimeException Java
【发布时间】:2013-08-24 08:21:14
【问题描述】:
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
    }
}

当我抛出两种类型的异常(Line4 中的 IOException 和 Line3 中的 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
    }
}

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

【问题讨论】:

    标签: java exception exception-handling


    【解决方案1】:

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


    相关帖子:

    参考资料:

    【讨论】:

    • 你不需要处理RuntimeException,听起来不正确吗?
    • 有一些RuntimeExceptions 应该被处理,即使它们不必被捕获/声明。 NumberFormatException 是一个常见的例子。
    • @chrylis,应该处理和需要处理其实差别很大。
    • @JunedAhsan。我说过不会抛出编译器错误。
    • @RohitJain 是的,我想知道,应该有一些理由;-)
    【解决方案2】:

    原因是在这种情况下有两种不同类型的异常。一个是checked 异常,应该由程序员处理,另一个是unchecked 异常,不需要特殊处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-31
      • 2012-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-20
      • 1970-01-01
      相关资源
      最近更新 更多