捕获块内的Java异常
下面是一个代码:捕获块内的Java异常,java,exception-handling,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("Inpu
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块错误。
我想知道这背后的原因。原因是
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
}
原因是
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
}
您可能应该解释这意味着什么,以及为什么它会产生OP看到的行为。@HunterMcMillen:更新了OP看到的问题的解释和解决方案。您可能应该解释这意味着什么,以及它产生OP所看到的行为的原因。@HunterMcMillen:更新了OP所看到的问题的解释和解决方案。当抛出
异常时,catch
块检查抛出的异常是否是catch
块中的异常类型的实例,并将其留在catch
块中。在您的示例中,包含IOException
的catch块将吞下所有IOException
及其子类型。i、 e.MalformedUrlException
当抛出异常
时,catch
块检查抛出的异常是否是catch
块中的异常类型
的实例,并将其留在catch
块内。在您的示例中,包含IOException
的catch块将吞下所有IOException
及其子类型。i、 e.格式错误异常