这是一个代码:
try {
FileOutputStream fout=new FileOutputStream("path");
javaClassFun(url,fout);
fout.close();
} catch (MalformedURLException ex) {
System.err.println("Invalid URL"+ex);
} catch (IOException e) {
System.err.println("Input/Output error"+e);
}
当我剪切最后一个catch块并在try块之后粘贴它时,它会给出无法访问的catch块错误。 我想知道这背后的原因是什么。
答案 0 :(得分:9)
原因MalformedURLException
继承自IOException
。
try {
//call some methods that throw IOException's
} catch (IOException e) {
// This will catch MalformedURLException since it is an IOException
} catch (MalformedURLExceptionn ex) {
// Will now never be caught! Ah!
}
如果要设计正确处理异常层次结构的catch块,则需要将超类最后一个以及要在其之前单独处理的子类。请参阅下面的示例,了解如何处理与您的代码相关的IOException
类层次结构。
try {
//call some methods that throw IOException's
} catch (MalformedURLExceptionn ex) {
// This will catch MalformedURLException
} catch (IOException e) {
// This will catch IOException and all other subclasses besides MalformedURLException
}