効果的な Java は、すべきではないことを推奨していcatch
NullPointerException
ます。それは常に正しいですか?
キャッチの多くの場合、NullPointerException
ボディのみをキャッチしますprintStackTrace()
。
NullPointerException
をキャッチしてコールしない場合、発生しprintStackTrace()
た場所を確認するにはどうすればよいですか?exception
また、キャッチNullPointerException
してcatch
ボディが空の場合、その時点でスタック情報を取得できませんか?
アップデート
Google Android ソース AOSP4.2.2_r1.2 で RuntimeException をキャッチする統計を分析しました。
249 の RuntimeException キャッチがあり、以下は catch-body の統計です。
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 と外部は、他の例外をスローして NPE を処理します。
ただし、フレームワークは通常、null またはその他の値を返すことで処理します。
catch-body で他の例外をスローすることは、悪いことでも良いことでもないと思いますか?
より高いレベル (アプリケーションなど) で NPE が発生し、アプリが完全に独立しているため、開発者が例外が重大ではないことを確認した場合、開発者が NPE をキャッチして無視することを受け入れることができますか?
後もう一つ、
google androidフレームワークのソースコードは、いくつかの点で不安定である可能性があると結論付けることができますRuntimeException
か?