我们应该在Java中处理未经检查的异常吗?

时间:2014-01-21 17:50:49

标签: java exception-handling

我在接受采访时被问到:

  

使用try-catch块处理未经检查的异常是不错的做法,还是应该让它们不处理?我们应该在try-catch之间编写大部分代码吗?

寻找一些令人满意的理由......

3 个答案:

答案 0 :(得分:2)

这取决于我们所指的未经检查的异常。在很多情况下,您可以预见到未经检查的异常可能会被抛出。我定期捕获未经检查的异常的一个简单示例是NumberFormatException。如果您完全可以确定在使用Integer.parseInt(String)时字符串将是一个数字但是它可能非常罕见,那么不要检查这个,为什么不将它存储为Integer第一名?您可能正在使用由用户输入的字符串,如果是这种情况,可能需要捕获它以适当的方式处理无效输入(例如要求他们重新输入输入)。

另一方面,有一些未经检查的例外,你应该能够避免不得不抓住。这方面的一个例子是ArrayIndexOutOfBoundsException。在尝试访问阵列的一部分之前,您应该确保它知道它可用。这通常可以通过根据您尝试访问的索引检查数组的大小来实现。允许抛出异常然后按照“检查”的方式捕获它是低效的,因为创建异常会产生开销。

关于将所有代码包装在try-catch中,我不禁感到这样做意味着你有一个期望代码在这样做时破坏而你不应该处理你不知道的问题的原因。如果你的意思是将程序包装在try {...} catch (Exception ex) {...}中,我无法看到任何用途,因为所有你将要做的就是JVM将为你做的事情,当异常一直向下抛出堆栈时。你可以做一些处理,也许试图恢复,但尝试恢复什么?如果你只是抓住Exception,你就不知道出现了什么问题需要恢复。

在某些情况下,在大型try-catch中包装代码可能很有用(如果你不希望系统的某些小部分最终破坏整个事物),但一般情况下,通常会有方法首先要避免这些事情发生,或者更好地处理它们,而不是将它包装在一个巨大的尝试中。

答案 1 :(得分:0)

你应该处理异常,你有一些有用的东西。提示抓住他们并继续,好像他们没有发生这不是一个好主意。

如果必须,您还需要处理未经检查的异常,因为该方法未在其throws子句中声明该已检查异常的父级

答案 2 :(得分:0)

检查或取消选中异常的事实不能决定是否处理它。两者之间的选择是由你所调用的方法的作者做出的,决定是否抓住它只是你自己的。

您必须告知自己抛出异常的条件,然后您必须决定在这些条件下您想要做什么。

请注意,今天的许多API都设计为没有任何已检查的异常,其中许多属于可恢复的类型。这使得检查/未检查的区别更加不重要。

相关问题