首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异常处理错误

异常处理错误
EN

Stack Overflow用户
提问于 2017-07-06 16:07:41
回答 4查看 89关注 0票数 0

当一个方法抛出异常时,它会在调用堆栈中搜索以找到一个处理程序,对吗?从这个意义上讲,为什么exep.second();?会出现错误?尽管我在方法第二()中捕获了异常。这是我的密码:

代码语言:javascript
复制
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()。为什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-07-06 16:17:10

IOException是一个检查过的异常,因此必须以某种方式处理。将throws IOException添加到main中会抑制这种行为,但这不是一个好的实践。

second()中,可以捕获first()的所有异常,但仍然在second()的声明中包含throws IOException。这是不必要的,因为您可以保证first()引发的任何异常都将在second()中被捕获和处理。

欲了解更多信息,请阅读:例外情况

票数 2
EN

Stack Overflow用户

发布于 2017-07-06 16:14:11

如果声明void second() throws IOException,然后调用main中的方法,则需要捕获此方法可能抛出的异常,就像对first()方法所做的那样。在这种情况下,您只是不需要在throws中使用second()子句。

票数 1
EN

Stack Overflow用户

发布于 2017-07-06 16:14:20

您显式声明了方法second()抛出异常。编译器不知道异常实际上是在方法中捕获的。将catch部件移动到main()中,错误将消失。或者更好的是,删除throws语句,因为您没有抛出任何东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44954001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档