捕获特定异常比捕获通用异常更便宜吗?

Kar*_*nan 3 java android

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

现在我有两段代码.

代码1

try{
//load the bitmap
}
catch(Exception e)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)

代码2

try{
//load the bitmap
catch (NullPointerException e)
{
//do something
}
catch(OutOfMemoryError e)
{
//do something else
}
Run Code Online (Sandbox Code Playgroud)

一段代码比其他性能更有效吗?如果是这样,为什么?

Mic*_*rek 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
Run Code Online (Sandbox Code Playgroud)

因此,每个例外都有一个代码,负责捕获它,但正如我所说,这是一个微小的差异,不应该考虑它.