Есть разные взгляды на этот вопрос, но я склонен смотреть на вещи следующим образом:
- a проверенное исключение представляет собой событие, которое можно разумно ожидать при некоторых предсказуемых, исключительных обстоятельствах, которые все еще находятся "в нормальных рабочих условиях программы / типичного вызывающего абонента", и которые обычно могут быть разобрался не слишком далеко вверх по стеку вызовов;
- исключение unchecked представляет собой условие, которое мы "не ожидаем" в нормальной рабочей среде программы, и которое может иметь дело с довольно высоким стеком вызовов (или даже возможно, заставит нас закрыть приложение в случае более простого приложения);
- ru ошибка представляет собой условие, которое, в случае его возникновения, обычно приводит к закрытию приложения.
Например, вполне в пределах типичной среды, в которой при некоторых исключительных, но вполне предсказуемых условиях закрытие файла может вызвать ошибку ввода-вывода (сброс буфера в файл при закрытии, когда диск полный). Поэтому решение позволить Closable выдать проверенный IOException, вероятно, является разумным.
С другой стороны, в стандартных API Java есть несколько примеров, когда решение менее оправданно. Я бы сказал, что API-интерфейсы XML, как правило, чрезмерно суетливы, когда дело доходит до проверенных исключений (почему вы не находите парсер XML, который вы действительно ожидаете и имеете дело с типичным приложением ...?), Как и API-интерфейс отражения (вы как правило, действительно ожидают, что определения классов будут найдены и не смогут работать, независимо от того, не являются ли они ...). Но многие решения спорны.
В целом, я бы согласился с тем, что исключения типа «исключение конфигурации», вероятно, следует не проверять.
Помните, что если вы вызываете метод, который объявляет проверенное исключение, но вы «действительно не ожидаете, что оно будет сгенерировано, и действительно не будете знать, что делать, если оно будет сгенерировано», то вы можете программно «пожать плечами». плечи "и повторно приведите его к RuntimeException или Error ...