我一直在试图找到这个问题的答案,但没有得到令人满意的解释。以下是一些背景:
Java 7允许我们在单个catch块中捕获多个异常,前提是这些异常来自不同的层次结构。例如:
但如果异常来自同一层次结构,我们必须使用多个 catch 块,例如:
但是如果我尝试编写以下代码,编译器会抱怨说“异常
现在我的问题是:为什么编译器在最后一个情况报错,难道它不能发现
Java 7允许我们在单个catch块中捕获多个异常,前提是这些异常来自不同的层次结构。例如:
try {
// some code
} catch(SQLException | FileNotFoundException e) {
e.printStackTrace();
} catch(Exception e) {
e.printStackTrace();
}
但如果异常来自同一层次结构,我们必须使用多个 catch 块,例如:
try {
// some code
} catch(FileNotFoundException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
但是如果我尝试编写以下代码,编译器会抱怨说“异常
FileNotFoundException
已经被替代的 IOException
捕获了”。try {
// some code
} catch(FileNotFoundException | IOException e) { // compiler error
e.printStackTrace();
}
现在我的问题是:为什么编译器在最后一个情况报错,难道它不能发现
FileNotFoundException
是 IOException
的特殊情况吗?如果可以的话,当我的异常处理逻辑相同时,这将避免代码重复。
IOException
,那么就不需要为FileNotFoundException
使用相同的处理程序块。 - atish shimpi