我听说不是抛出异常并在try / catch块中捕获它们,而是在方法中返回null更合理,因为try / catch是消耗操作的资源。这是真的吗?
答案 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是很便宜的(例如,当放入循环时除外)。
虽然忽略它们是过早优化的标志,因为只返回null
或false
会阻碍您的控制流程,因为您的代码会变得混乱。
我的生活中已经看到了大量的if ( something != null && something.exists() && something.isTrue() )
代码,而且它并不漂亮。