当前位置: 首页 > 面试题库 >

IOException vs RuntimeException Java

云和同
2023-03-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”之前,我的程序才会编译。

而如果我反转“ throw”以表明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使用“ throws”?


问题答案:

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

参考文献:

  • JLS-异常的种类和原因
  • Oracle异常教程


 类似资料:

相关阅读

相关文章

相关问答