应该unchecked异常进行捕获和处理?(Should unchecked exceptions

2019-07-03 14:28发布

我最近一直念叨例外很多帖子,我有一个问题unchecked异常是否应该被抓。 我已阅读,如果你希望你的应用程序从您使用checked异常的错误中恢复。 但是,如果你不能与检查的异常处理你要么把它包装成另一种检查型异常,所以你可以将它传递到另一个层; 比如你换一个SqlException ,或者你抛出一个未经检查的异常。 然而,你应该抓住unchecked异常? 被unchecked异常理想的编程,你不检查错误? 应该从你的应用程序,他们只是泡了?

Answer 1:

应该unchecked异常进行捕获和处理?

答案是,这取决于:

  • 这取决于异常是什么。

  • 这取决于为什么抛出异常。 是不是“预期”? 这是由于一个错误,或者错误的输入,或环境问题? 或者是其他东西?

  • 这取决于是否有恢复的好方法。 通常部分取决于以前的标准。

如果异常是意外的,异常的原因是不确定的,和/或是否存在,如果你捕获该异常没有声音恢复策略,那么它一般都比较好,允许例外冒泡,并确保它得到报道/记录在顶层。

而如果异常是一个Error ,一般的规则是,你不应该试图恢复。 和包括StackOverflowError和(特别是) OutOfMemoryError 。 该Error例外表明一个问题,即很难(甚至不可能)安全地从复原,最好的策略是允许或导致应用程序退出。


你是什​​么意思的报道/记录在顶层? 你的意思是在例如UI层捕获它,并显示一个对话框,它记录等?

我的意思是例外,它的堆栈跟踪应写入应用程序的日志文件,以便在问题的证据可用于维护者看。 无论您也尽量说明问题向最终用户(以及你如何做到这一点)是另外一个问题。

“顶级”可能是“主”的方法,一个子线程或可运行的“运行”的方法......或者未捕获的异常处理程序。 基本上,无论是异常最终将“冒泡”到如果不抓住它。 详细情况将取决于您的应用程序的体系结构。



Answer 2:

你应该捕捉异常 - 选中或取消选中 - 如果你能在从问题中恢复有意义的方式处理它。 你通常如果你没有处理的好方法应该捕捉异常。

我见过太多的代码,通过做“处理”异常e.printStackTrace()然后继续仿佛什么是错的。 忽略这样一个问题通常只是导致其他问题以后。



Answer 3:

没有禁止你捕捉运行时异常。

这一趋势,如今,是使用越来越多的运行时异常,并且越来越少检查的异常。 春天,Hibernate和最新的Java EE规范使用运行时异常几乎完全。 这使得业务代码更易于阅读和不太繁琐。

运行时异常通常旨在在全部没有被捕获,或者只抓到调用堆栈的底部,在UI层,以显示错误消息,因为这通常是你可以做的,当这样的异常的唯一的事情发生。



Answer 4:

之间的根本区别CheckedUnchecked的例外是,你需要明确地处理前或在传播它inheritance hierarchy ,而这是不需要的版本。

此外, CheckedException从延伸java.lang.Exception ,而UncheckedExceptions从延伸java.lang.RuntimeException ,其不需要进行处理。 需要注意的是, RuntimeException是自己的子类Exception

鉴于所有上述信息,如果你handle一个unchecked exception ,然后它的罚款。 它会正常工作,而控制将转到相应的catch块。 但是,你不应该这样做。 除非,你真的需要它,你必须处理它们取之有道。

  • 对于如: -你应该处理一个IllegalArgumentException这是一个Unchecked Exception

  • 然后,你不应该处理这样的错误: - StackOverflowError 。 至于,你不知道为什么这个问题会发生,什么可能是处理它的适当方式。 所以,就交给了JVM。 ErrorsUnchecked Exception ,你不能歇着。

有关详细信息,请参考以下链接: -

  • http://tutorials.jenkov.com/java-exception-handling/checked-or-unchecked-exceptions.html
  • http://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html


Answer 5:

首选检查异常通常是:你只需要添加它throws ,如果你不能做任何事情, catch并将其与原转换成新的异常,如果你不能做任何有用的这件事,但是可以添加信息的原因,和catch它,做一些事情,如果它是可行的,并在你的代码正确的地方做一些事情。

unchecked异常是比较麻烦一些。 在理想世界中,应注明编程/逻辑错误,并非常像处理断言失败,没有抓到,尤其是不能吞噬。

一些未经检查的异常从Java标准库或其他图书馆未来应该在我看来,真正被检查异常,但并非如此。 这些情况下,如果主叫方应该承认,这种异常可通过他们,即使他们没有catch他们。 对于可能也被检查异常,基本相同的规则unchecked异常:抓住他们,如果你想要做的事他们,否则让他们泡了。 如果你是一个库(即使它只是内部的应用程序),以及一个未经检查的异常真的是一些东西,应该以后被捉住,那么你可能想赶上并重新把它裹进库中的代码检查异常。

在一般情况下,尽量避免抛出unchecked异常。 检查输入,所以你并不需要catch ,如果异常仍抛出,那么它是一个错误,并应留有未捕获。 只有catch他们,如果它是唯一的,或者至少显然是最好的方式。

为了公平对待Java库,语言被设计在了时代,集成开发环境还不马上抱怨缺少抛出条款,并提供,以填补他们在自动,这样使得他们选中可能已经通过减少开发商的负担合理的。 但随着现代化的工具,真的没有借口。

然后,在其他的答案中提到,有你应该赶上unchecked异常。



Answer 6:

你应该抓住unchecked异常?

Yes和No.取决于被抛出什么异常。

被unchecked异常理想的编程,你不检查错误?

你可以写一个catch块捕获未经检查的异常,但也取决于你是否应该 。 如果你这样做,然后它可能是一个错误仍未得到解决了很长一段时间,并通过时间才发现它的大小也发生了变化。

应该从你的应用程序,他们只是泡了?

如果他们出现,尽量解决他们的原因(如果它spossible)。 不要catch总是他们作为硬性规定。



文章来源: Should unchecked exceptions be caught and dealt with?