IOException与RuntimeException Java

时间:2013-08-24 08:21:15

标签: 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
    }
}

当我抛出两种类型的异常(Line4中的IOException和Line3中的RunTimeException)时,我发现我的程序没有编译,直到我在第1行&中的throws子句中指示“IOException”。第2行。

如果我反向“抛出”以指示抛出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行)?

2 个答案:

答案 0 :(得分:14)

因为IOException是Checked Exception,应该处理或声明要抛出。 相反,RuntimeException是未经检查的例外。你不需要处理或声明它被抛出在方法throws子句中(我的意思是,如果你不处理未经检查的异常,它在语法上是正确的。编译器不会生气)。但是在某些情况下,您需要根据某些未经检查的异常处理并采取相应措施。


相关文章:

<强>参考文献:

答案 1 :(得分:0)

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