首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异常捕获层次过程

异常捕获层次过程
EN

Stack Overflow用户
提问于 2014-03-11 23:40:50
回答 4查看 244关注 0票数 0

我正在java中实现异常处理,有多个异常。

查看以下场景:函数f1抛出异常e1、e2、e3和e4,而函数f2捕获这些异常。

现在我想要捕获e1,e2显式地通过catch (异常e1和e2)捕获,其他的异常应该通过catch(异常e)在同一个块中全部捕获,因此e1和e2是一个特例,其他都是一般的异常。

那么接下来的工作呢?

代码语言:javascript
复制
try{
       //some work`
} catch(ExceptionType1 e1) {
      //do some special logging
} catch (ExceptionType2 e2) {
      //do some special logging
} catch(Exception e) {
     //do general logging for other exceptions
}

我的问题是,ExceptionType1(e1)是否也会被e例外所捕获?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-03-11 23:54:06

规格写入

如果由于值V的抛出而突然完成try块的执行,则有一个选择:

  • 如果运行时类型V的赋值与try语句的任何catch子句的可捕获异常类(§5.2)兼容,则选择first (最左边)这样的catch子句。值V赋值给所选catch子句的参数,执行该catch子句的块,然后进行选择:
代码语言:javascript
复制
- If that block completes normally, then the try statement completes normally.
- If that block completes abruptly for any reason, then the try statement completes abruptly for the same reason.

因此,最多只执行一个catch块。

票数 2
EN

Stack Overflow用户

发布于 2014-03-11 23:47:30

为此,需要有具有不同异常(如NullPointerException NumberFormatException )的捕获块,而带有异常参数的catch块将捕获一般异常,因为异常是所有异常的超类。

代码语言:javascript
复制
try{
   //some work`
} catch(NullPointerException e1) {
  //do some special logging
} catch (NumberFormatException e2) {
  //do some special logging
} catch(Exception e) {
 //do general logging for other exceptions
}
票数 2
EN

Stack Overflow用户

发布于 2014-03-11 23:48:47

使用代码将捕获catch(Exception e1){...}中的所有异常

另一个catch-blocks未使用。如果您想以不同的方式处理不同的Exception-types,则必须给catch(...)其他Exception-types。

喜欢

代码语言:javascript
复制
try{
}catch(IOException e1){
  // Do sth
}
catch(NullPointerException e2){
  // Do sth else
}
// and so on...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22339052

复制
相关文章

相似问题

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