广义的java_为什么我们在Java中遵循从狭义到广义的异常捕获机制?

采取这段代码:

try

{

FileReader f=new FileReader("D:/sda.t");

}catch(FileNotFoundException e)

{

e.printStackTrace();

}catch(Exception f)

{

f.printStackTrace();

}

我们为什么要遵循这种方法?

为什么我们不只使用异常对象来捕获所有异常,而不是去处理特定的异常?

因为您想以不同的方式处理每个异常,而不是全部相同地处理它们?

为什么Catch(Exception)几乎总是一个坏主意的可能重复?

复制为什么捕获异常时顺序很重要?

正如其他人所说,捕获所有Exception是一个坏主意,因为通常您想以不同的方式处理它们。

尽管您还需要注意,捕获Exception也会捕获所有RuntimException,而您通常不希望捕获它们。这些包括NullPointerException之类的东西。

如果未捕获RuntimeException,则程序将在到达它后立即死亡,并且会通知您;如果您捕获Exception,却忘记处理任何显示异常的内容,那么您将错过RuntimeException s,表示程序员错误。

Why do we follow this approach?

Why don't we just use Exception objection to catch all exceptions rather going for specific ones?

很简单,当您希望在发生特定异常时执行特定任务时,可以执行此操作。

3个原因:

分离错误处理代码。

为了能够将错误报告传播到方法的调用堆栈中。

分组和确定错误类型。

查看文档以及此答案。

因为在实际可能发生的特定异常情况下,您将以不同的方式处理它。例如,您可能想在获得FileNotFoundException时创建文件。

如果像您提供的示例中那样从宽到窄,那么FileNotFoundException将永远不会被捕获,因为首先使用宽的Exception。这么宽到窄是没有用的。

在java7或更高版本中,您可以使用multicatch语句:

catch(SQLException | IOException e) {

logger.log(e);

}

如果您对异常所做的唯一事情是printStackTrace(),则没有任何意义。关键是不同的处理代码可以与不同的异常相关联,并且按照指定的顺序(使用"仅优先匹配"选择机制)将抛出的异常与捕获列表进行匹配。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值