说我在我的Android设备上加载了一个位图。可以抛出许多可能的异常。为简单起见,我们选择NullPointerException
和OutOfMemoryError
。
现在我有两段代码。
代码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
}
一段代码是否比其他性能更有效?如果是这样,为什么?
答案 0 :(得分:5)
从字节代码的角度来看,第一个更有效(更少的代码)。
但你应该从不以这种方式看待表现。
如果你对所有类型的异常都有相同的行为,你应该使用第一批代码,以任何其他方式,第二代。
在字节代码中,您有以下代码负责捕获eceptions:
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
因此,每个异常都有一个代码,负责捕获它,但正如我所说,这是一个微小的差异,不应该考虑它。
答案 1 :(得分:1)
性能方面没有区别,因为即使在多个catch块的情况下也只会执行一个catch。
代码明智,是的,首先是Michal说的更好。好的做法明智的第二种方法更好,因为您能够捕获特定的异常并适当地处理它们。
旁注:永远不会出现内存错误,它的错误也不例外,你无法有效处理它
答案 2 :(得分:0)
如果每个例外都有不同的行为,第二个行为优于第一个。
表演将是相同的。