catch块内的Java异常

时间:2014-02-22 15:50:21

标签: java exception-handling

这是一个代码:

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块错误。 我想知道这背后的原因是什么。

1 个答案:

答案 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
}