我想知道在实践中其他SOers倾向于如何处理和/或防止异常。
在什么情况下,如何防止异常?在什么情况下会捕获异常?
我通常通过,嗯,本质上说if(foo!=null) {...}来阻止'NullPointerExceptions‘(和其他类似的
我发现在大多数情况下,这比使用try-catch块所涉及的一切都要小。
当潜在的异常更复杂或更多时,我会使用try-catch块。
发布于 2009-05-21 20:11:50
在我看来,只有当引用为null (再次,例如)实际上表示有效的程序状态时,才有必要防止NullPointerException (例如)。如果没有,你应该阻止它的发生,因为在这种情况下,你程序很难死。
特别是在Java语言中,从RuntimeException派生的某些异常(比如IllegalArgumentException)实际上是用来通知编程错误的,如果您的程序是正确的,这些情况就不应该发生。我试着遵循这一点。如果我正在编写一个对其参数进行限制的方法,我将不会试图避免抛出异常。我会积极地抛出一个。
发布于 2009-05-21 20:07:23
如果您可以防止异常,那么最好是这样做。例如,任何NullPointerException通常指示编程错误。(这也是它是RuntimeException的原因之一。)
当您希望能够检测到某一代码层中的失败情况时,异常更有用,但您不希望在那里处理失败情况,而是在更高级别的代码中进行处理。也就是说,您打算在堆栈中抛出不止一个帧的异常--或者抛出堆栈中的所有帧。当您不希望程序能够有意义地处理问题时,异常也很有用。
发布于 2009-05-21 21:39:09
在你知道如何处理异常的地方捕捉它们。
你不应该到处检查( foo !=null),只检查第一次使用foo的地方。在此之后,只需使用foo而不进行检查。如果在确定foo不是null之后,foo突然变成null,那么您就有大问题了。那么,一个例外是合适的。
try {
foo();
}
catch (FooException e) {
}是一种糟糕的代码气味,应该避免
https://stackoverflow.com/questions/894829
复制相似问题