Всегда ли это правильно?
Во многих случаях перехвата NullPointerException тело перехвата вызывает только printStackTrace().
Если я не перехватываю NullPointerException и не вызываю printStackTrace(), как мне это сделать можно проверить место, где произошло исключение?
А также, если я перехватываю NullPointerException и тело catch пусто, мы не сможем получить никакой информации о стеке в это время, не так ли?
ОБНОВЛЕНИЕ
Я проанализировал статистику перехвата RuntimeException в исходном коде Google Android, AOSP4.2.2_r1.2.
Имеется 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.
Но платформы обычно обрабатывают это, возвращая null или другие значения.
- Считаете ли вы, что выдача других исключений в catch-body не является плохой или хорошей обработкой?
- Если NPE возникло на более высоком уровне уровни (например, приложения) и разработчик подтверждает, что исключение не является критическим, поскольку приложение полностью независимое, могу ли я согласиться, чтобы наш разработчик игнорировал NPE путем перехвата?
Могу ли я заключить, что исходный код Google Android Framework может быть нестабильным в аспектах RuntimeException?
Подробнее здесь: https://stackoverflow.com/questions/182 ... rexception
Мобильная версия