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”。
而如果我反转“抛出”以指示抛出 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 使用“抛出”?