try / catch是资源消耗操作吗?

时间:2010-12-29 08:51:41

标签: java

我听说不是抛出异常并在try / catch块中捕获它们,而是在方法中返回null更合理,因为try / catch是消耗操作的资源。这是真的吗?

9 个答案:

答案 0 :(得分:6)

如果抛出异常,Try / catch只占用大量资源,否则几乎没有。在程序清洁时使用它们。返回null也可以。这取决于

答案 1 :(得分:4)

您所听到的确实如此:抛出和捕获的异常比返回null更昂贵。但是,还要考虑维护代码的所有调用者的费用。他们必须检查null,如果您想要添加更多类型的错误,您将需要修改您的呼叫者。

对特殊情况使用例外。如果错误是常见或通常的情况,则不例外:返回状态代码。

答案 2 :(得分:3)

即使它(在某种程度上)是真的,但是过早优化的另一个(坏)情况是将其作为避免一般异常的理由。

例外情况是通信条件可能会进一步处理调用堆栈而不是直接调用者。如果你有这样的条件,你应该使用例外。

答案 3 :(得分:2)

try / catch消耗琐碎的资源,但抛出异常相对昂贵。例外情况只应在特殊情况下抛出,如果小心使用,则不应成为性能问题。

答案 4 :(得分:2)

当手头的条件是异常条件时,你应该抛出异常,因为Exception对象可以用来将信息传递回调用堆栈。

如果这是一个适当的非特殊值,表示“此处没有”或某些等效值,则应从方法而不是预期值返回null

对于null不合适的非特殊“错误”,您通常可以做不同的事情。

答案 5 :(得分:0)

对我来说,try catch只是一种捕获错误的方法,如果只是因为函数无法运行,我会使用返回值。

答案 6 :(得分:0)

是的,抛出和捕获异常可能是昂贵的操作。只有在特殊情况下才会抛出异常(很少发生的情况)。例如,当你可以返回true / false时,避免在验证某些用户输入时抛出异常。

答案 7 :(得分:0)

并非总是如此,取决于具体情况。想象一下,你可以在一个方法中获得三种或更多类型的错误。然后,返回单个“null”值将不会告诉客户端代码有关错误类型的信息。

另外,简单地从函数返回并不总是你想要做的流量控制。

答案 8 :(得分:0)

正如其他人所指出的那样,异常在捕获时很昂贵,但只是在代码中添加try catch是很便宜的(例如,当放入循环时除外)。

虽然忽略它们是过早优化的标志,因为只返回nullfalse会阻碍您的控制流程,因为您的代码会变得混乱。

我的生活中已经看到了大量的if ( something != null && something.exists() && something.isTrue() )代码,而且它并不漂亮。