Исключительные ситуации и качественный код

Давно заметил, что "хорошего" и "плохого" программиста можно достаточно просто отличить по двум показателям:
  • его отношению к наименованию классов/методов/переменных и прочих составных элементов кода
  • отношения к исключительным ситуациям
И если перлов на тему первого индикатора в интернете много, то вот второй критерий исследован не достаточно. Об этом и поговорим.
Программист "плохой", исключений всячески избегает и боится, он:
  • практически никогда не объявляет собственных исключений, везде используют RuntimeException или, если повезет, Exception;
  • если приходится работать с чужими исключениями -- тупо их подавляет;
  • почти всегда отлавливает Throwable или Exception;
  • забывает собственно отработать исключение;
  • не разграничивает исключения в блоке catch;
  • не понимает принципиальной разницы между контролируемыми и неконтролируемыми исключениями;
  • творит пугающие вещи в блоке finally.
Пожалуй на вскидку все.

И в качестве демонстрации, приведу небольшие наглядные пособия того, как не надо и, как надо обращаться с исключениями, взятые из жизни. В чем собственно состоит отличие предлагается выбрать самому читателю.

Не правильно
Правильно

Не правильно
Правильно

Не правильно
Правильно

Не правильно
Правильно

P.S. в случае с "правильными" вариантами для Hibernate используется декларативное управление транзакциями, а потому не закрываемая сессия и пробрасываемые исключения использованны преднамеренно.