有效的 java 建议我们不应该catch
NullPointerException
. 总是正确的吗?
在很多情况下NullPointerException
,catch 体只调用printStackTrace()
。
如果我不接NullPointerException
电话printStackTrace()
,我怎么能检查发生的地方exception
?
而且如果我抓到NullPointerException
并且catch
body是空的,我们那时就无法获得任何堆栈信息,可以吗?
更新
我分析了google android源码AOSP4.2.2_r1.2中捕获RuntimeException的统计数据。
有 249 个 RuntimeException 捕获,以下是捕获体的统计信息。
42%: throw it again as other Exceptions (RuntimeException: 33%, others: 8%)
32%: just return null or 0/false/true or other default values
14%: just call log or printstacktrace
5%: just comment like "// Fall through.", "// ignore, not a valid type.", "// system process dead", "// do nothing"
2%: empty body
3%: display error messages or send fail codes (ex. network service discovery failed: replyToMessage(msg, NsdManager.STOP_DISCOVERY_FAILED, NsdManager.FAILURE_INTERNAL_ERROR); )
3%: intialize or reset related variables.
在几乎所有情况下,dalvik 和 external 通过抛出其他异常来处理 NPE。
但框架通常通过返回 null 或其他值来处理。
你认为在 catch-body 中抛出其他异常是不是不好或好的处理?
如果 NPE 发生在更高级别(例如应用程序)并且开发人员确认异常并不严重,因为该应用程序是完全独立的,我可以接受我们的开发人员通过捕获来忽略 NPE 吗?
还有一件事情,
我可以断定google android框架源代码在某些方面可能有些不稳定RuntimeException
吗?