3

假设我正在将位图加载到我的 Android 设备上。可以抛出许多可能的异常。为了简单起见,让我们取NullPointerExceptionOutOfMemoryError

现在我有两段代码。

代码 1

try{
//load the bitmap
}
catch(Exception e)
{
//do something
}

代码 2

try{
//load the bitmap
catch (NullPointerException e)
{
//do something
}
catch(OutOfMemoryError e)
{
//do something else
}

在性能方面,一段代码是否比另一段代码更有效?如果是这样,为什么?

4

3 回答 3

5

字节码的角度来看,做第一个更有效(更少的代码)。

但是你永远不应该以这种方式看待性能。

如果您对所有类型的异常都有相同的行为,则应该使用第一组代码,以任何其他方式,使用第二组代码。

在字节码中,您有以下代码负责捕获接收:

   L2
    LINENUMBER 7 L2
   FRAME SAME1 java/lang/NullPointerException
    ASTORE 1
    GOTO L4
   L3
    LINENUMBER 9 L3
   FRAME SAME1 java/lang/Exception
    ASTORE 1
   L4

所以每个异常都有一个代码负责捕获它,但正如我所说,这是一个很小的差异,不应该考虑在内。

于 2013-05-15T07:26:24.827 回答
1

性能方面没有区别,因为即使在多个 catch 块的情况下也只会执行一个 catch。

代码方面,是的,正如 Michal 所说,第一个更好。好的做法明智的第二种方法更好,因为您能够捕获特定的异常并适当地处理它们。

旁注:永远不要发现内存不足错误,它是一个错误而不是异常,你不能有效地处理它

于 2013-05-15T07:34:14.290 回答
0

如果您对每个异常都有不同的行为,则第二个比第一个好。

表演将是相同的。

于 2013-05-15T07:39:48.347 回答