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并采取相应的措施。
相关文章:
引用:
关于java - IOException vs RuntimeException Java,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18416511/