Получить доступ

Что верно про иерархию Throwable?

MiddleИсключения и ресурсы
Коротко

Throwable → Error и Exception; RuntimeException — наследник Exception. Checked = Exception минус RuntimeException. Error (OutOfMemoryError, StackOverflowError) — среда в нерабочем состоянии, ловить бессмысленно; catch (Exception) его не ловит.

  • catch (Throwable) — только на самой границе, для логирования
  • OutOfMemoryError после перехвата оставляет JVM в непредсказуемом состоянии
  • Свои исключения наследуют от Exception или RuntimeException, не от Error

А ещё -XX:+ExitOnOutOfMemoryError — дать оркестратору перезапустить процесс

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Практическая ценность разделения в том, чтобы понимать, что ловить. Error (OutOfMemoryError, StackOverflowError) означает, что среда исполнения в нерабочем состоянии — перехватывать его бессмысленно и вредно, потому что дальнейшая работа непредсказуема. Checked-исключения компилятор заставляет объявить или обработать: замысел был в том, чтобы восстановимые сбои нельзя было проигнорировать. Unchecked обычно означают ошибку программиста. Ловить Throwable почти никогда не нужно — так вы перехватите и Error. Отдельно стоит помнить, что многие современные API и языки на JVM отказались от checked-исключений как от идеи, которая на практике порождает больше пустых catch, чем корректной обработки.

Что хотят услышать

  • Структура иерархии.
  • Почему не ловят Error.

Частые ошибки

  • Ловить Throwable или Error «на всякий случай».
  • Считать, что catch (Exception e) перехватывает всё.

Проверьте себя

Несколько верных вариантов. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Throwable делится на Error и Exception; RuntimeException наследует Exception
  • ✓Checked — это Exception и его наследники, кроме ветки RuntimeException
  • ✓Error сигнализирует о проблемах, из которых приложение обычно не может восстановиться, — их не ловят
  • ✗catch (Exception e) перехватит в том числе OutOfMemoryError

Что спросят дальше

  • Почему пустой catch — антипаттерн?
  • Что такое цепочка причин и зачем передавать cause?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем