(несколько лет спустя, для людей, прибывающих сюда через авиакомпании Google)
Проверенные исключения были ошибкой в дизайне языка Java. СРОК. Всякий раз, когда вы обнаружите проверенное исключение, заключите их в непроверенное исключение (возможно, RuntimeException).
К сожалению, из-за проблем с маркетингом сначала Sun, а затем Oracle не смогли открыто признать свою ошибку.
Во время создания Java обработка исключений была неясной. Java-дизайнеры наивно полагали, что принуждать разработчиков проверять исключения во время компиляции - хорошая идея. Хотя это выглядит интуитивно правильным, это оказалось анти-паттерном, похожим на использование «GOTO». Это никогда не работало на практике и вызывает много проблем. Исключения должны обрабатываться в «главном цикле» или «контроллере», поскольку в противном случае, если бы они могли обрабатываться внутри функции, вызывающей ошибку, они не были бы исключением, а предполагаемой ошибкой, которая должна поддерживаться нормальное возвращаемое значение API. Исключение, по своей природе, является чем-то, что не рассматривается, и это не допускает нормальное выполнение кода в потоке.
Обратите внимание, например, на то, что Spring, «стандартная» среда Java для разработки корпоративных приложений, просто ограничивает превращение проверенных исключений в непроверенные исключения.
Для справки: Kotlin, разработанный экспертами по Java и Scala и одним из самых популярных языков в исследованиях стекового потока ), полностью исключил проверенные исключения. Более подробная информация доступна по адресу: 2