防止异常与捕获Java中的异常

Tom*_*and 11 java error-handling exception

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

在什么情况下你会阻止例外,以及如何?在什么情况下你会捕获异常?

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

我发现在大多数情况下,这比使用try-catch块所涉及的所有内容都要小.

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

Mik*_*els 23

在我看来,当引用为空(例如,再次)实际表示有效的程序状态时,仅防止NullPointerException(例如)是有意义的.如果没有,你应该不会阻止它的发生,因为在这种情况下,你程序难改.

特别是在Java中,从RuntimeException降序的某些异常(例如IllegalArgumentException)实际上是指示编程错误,如果程序正确则不应该发生这种情况.我试着遵循这个.如果我正在编写一个对其参数设置限制的方法,我将不会尝试避免抛出异常.我会积极地抛出一个.


Edd*_*die 11

如果你可以防止异常,那么这样做的编程实践会更好.例如,任何NullPointerException通常都表示编程错误IMO.(这是一个RuntimeException的原因之一.)

当您希望能够在一层代码中检测到故障条件时,异常更有用,但您不希望在那里处理故障条件,而是在更高级别的代码中处理故障条件.也就是说,您打算在堆栈中抛出多于一帧的异常 - 或者一直向上抛出堆栈.当您不希望程序能够有意义地处理问题时,例外也很有用.


Osc*_*Ryz 6

三种例外.

运行时异常始终是可以预防的.你只需要正确编程.

如果可能的话,应该将已检查的异常转换为正确的抽象级别(如果他不知道/不关心SQL异常,则不向用户抛出SQLException)或在更高级别处理(即,让它们弹出)并显示/记录正确的消息.

根本不应该处理错误.

有关如何防止RuntimeExceptions的更多详细信息,请参阅该链接


Cha*_*lie 5

捕获您知道如何处理它们的异常.

你不应该在任何地方检查(foo!= null),检查foo首次使用的位置.之后只需使用foo而无需检查.如果foo在确定它不为null后突然变为null,则会出现大问题.那么例外是合适的.

try {
   foo();
}
catch (FooException e) {
}
Run Code Online (Sandbox Code Playgroud)

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