首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Java中预防异常与捕获异常

在Java中预防异常与捕获异常
EN

Stack Overflow用户
提问于 2009-05-21 20:02:34
回答 12查看 8.2K关注 0票数 13

我想知道在实践中其他SOers倾向于如何处理和/或防止异常。

在什么情况下,如何防止异常?在什么情况下会捕获异常?

我通常通过,嗯,本质上说if(foo!=null) {...}来阻止'NullPointerExceptions‘(和其他类似的

我发现在大多数情况下,这比使用try-catch块所涉及的一切都要小。

当潜在的异常更复杂或更多时,我会使用try-catch块。

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2009-05-21 20:11:50

在我看来,只有当引用为null (再次,例如)实际上表示有效的程序状态时,才有必要防止NullPointerException (例如)。如果没有,你应该阻止它的发生,因为在这种情况下,你程序很难死。

特别是在Java语言中,从RuntimeException派生的某些异常(比如IllegalArgumentException)实际上是用来通知编程错误的,如果您的程序是正确的,这些情况就不应该发生。我试着遵循这一点。如果我正在编写一个对其参数进行限制的方法,我将不会试图避免抛出异常。我会积极地抛出一个。

票数 24
EN

Stack Overflow用户

发布于 2009-05-21 20:07:23

如果您可以防止异常,那么最好是这样做。例如,任何NullPointerException通常指示编程错误。(这也是它是RuntimeException的原因之一。)

当您希望能够检测到某一代码层中的失败情况时,异常更有用,但您不希望在那里处理失败情况,而是在更高级别的代码中进行处理。也就是说,您打算在堆栈中抛出不止一个帧的异常--或者抛出堆栈中的所有帧。当您不希望程序能够有意义地处理问题时,异常也很有用。

票数 11
EN

Stack Overflow用户

发布于 2009-05-21 21:39:09

在你知道如何处理异常的地方捕捉它们。

你不应该到处检查( foo !=null),只检查第一次使用foo的地方。在此之后,只需使用foo而不进行检查。如果在确定foo不是null之后,foo突然变成null,那么您就有大问题了。那么,一个例外是合适的。

代码语言:javascript
复制
try {
   foo();
}
catch (FooException e) {
}

是一种糟糕的代码气味,应该避免

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/894829

复制
相关文章

相似问题

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