java为啥要捕捉异常_为什么捕获Throwables时会捕获Java中的异常?

这一切都取决于你在捕获它后会对错误做些什么.通常,捕获错误可能不应被视为“正常”异常流程的一部分.如果你确实抓住了一个,你就不应该考虑“继续进行,好像什么也没发生”,因为JVM(和各种库)将使用错误作为一种信号“发生真正严重的事情并且我们需要尽快关闭“.一般来说,最好在他们告诉你结束的时候听他们说.

另一个问题是,错误的可恢复性与否可能取决于特定的虚拟机,这是您可能控制或不能控制的.

也就是说,有一些极端情况是安全和/或希望捕获错误,或者至少是某些子类:

>在某些情况下,您确实希望停止正常的流程:例如,如果你在Servlet中,你可能不希望Servlet runner的默认异常处理程序向全世界宣告你有一个OutOfMemoryError,无论你是否可以从中恢复.

>有时,如果JVM可以从错误原因中干净地恢复,则会抛出错误.例如,如果在尝试分配数组时发生OutOfMemoryError,至少在Hotspot中,您似乎可以安全地从此恢复. (当然还有其他情况可能会抛出OutOfMemoryError而不能安全地尝试使用它.)

所以底线是:如果你确实捕获了Throwable / Error而不是Exception,那么它应该是一个明确定义的情况,你知道你正在“做一些特殊的事情”.

编辑:可能这很明显,但我忘了说在实践中,JVM实际上可能不会在Error上调用catch子句.我肯定看到Hotspot明显地掩盖了捕获某些OutOfMemoryErrors和NoClassDefFoundError的尝试.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值