java - 捕获特定异常是否比捕获通用异常更便宜?

标签 java android

假设我正在将位图加载到我的 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
}

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

最佳答案

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

但是您永远不要以这种方式看待性能。

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

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

   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

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

关于java - 捕获特定异常是否比捕获通用异常更便宜?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16559049/

相关文章:

java - 缩放两个项目

android - Cardslib 圆角

java - Thymeleaf Spring MVC 中的输入字段显示为空白

java - 如何更改Android通知栏,但底部的系统栏颜色不同

java.util.Map 与 HtmlDataTable

java - 向 Activity 传递结果 ResultInfo{who=null, request=2, result=-1, data=Intent { }} 失败

android - 在 Android 中使用 TLS 并禁用 SSL

java - Android 应用程序在启动前崩溃

Android将经度转换为ExifInterface的GPS标签

android - Recyclerview 和 Detailsfragment : elevation, 层次结构之间的共享元素转换,bringToFront