当一个方法抛出异常时,它会搜索调用堆栈以查找处理程序,对吗?从这个意义上说,为什么 exep.second(); 会出现错误?即使我在方法 second() 中捕获了异常。这是我的代码:
public class Exep {
void first()throws IOException{
throw new IOException("device error");
}
void second()throws IOException{
try{
first();
}catch(Exception e){
System.out.println(e);
}
}
public static void main(String args[]){
Exep exep = new Exep();
exep.second();
}
}
但是将抛出IOException添加到main()后,错误就会消失。为什么?
最佳答案
IOException 是一个受检查的异常,因此必须以某种方式进行处理。添加throws IOException
to main 会抑制这种行为,但这不是一个好的做法。
在 second()
,您捕获 first()
中的所有异常,但您仍然包括 throws IOException
在second()
的声明中。这不是必需的,因为您可以保证first()
抛出的任何异常将被抓获处理second()
.
更多阅读:Exceptions
关于java - 异常处理错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44954001/