Страницы

Поиск по вопросам

суббота, 4 января 2020 г.

Проверяемые исключения 2. А смысл?

#java #исключения


Вопрос навеян вот этим вопросом. Там мне все советуют преобразовать проверяемое исключение
в непроверяемое.

А вопрос у меня такой: зачем разработчики Java придумали такой термин как проверяемое
исключение? Какой от этого профит? Чтобы знать какой метод может выбросить исключение,
а какой нет? Так любой метод может выкинуть какой-нибудь NullPointerException который
все равно нужно ловить и обрабатывать? Так чем NullPointerException отличается от IOException
который нужно обязательно декларировать в throws? Ни в одном, известном мне, языке,
такого термина нет.

Единственное объяснение, которое я могу придумать это то, что при возникновении проверяемого
исключения, объект находится в некотором предусмотренном состоянии, и при непроверяемом
- объект может быть поврежден.
    


Ответы

Ответ 1



Вопрос о проверяемых и непроверяемых исключениях довольно спорный и часто возникающий, особенно когда появляется куча новых API, которым они мешают нормально развернуться (те же стримы и лямбды, например). Поэтому рассуждать о правильности их ввода спустя больше чем 20 лет после появления языка уже не совсем правильно. NPE непроверяемое просто потому, что может теоретически возникнуть в любой строчке. Деление на ноль потенциально охватывает все случаи деления целых чисел, а OutOfMemoryError может вылететь во время создания любого объекта. Аналогичные причины можно найти и для остальных исключений.

Ответ 2



NullPointerException никогда не произойдет, если вы будете делать проверку на null. IOException - такое исключение может воникнуть, даже если вы постараетесь заранее определить, возникнет ли оно. По сути, это для программиста как "чистый код". Он делает более удобно и красиво архитектуру кода. Т.е. если, к примеру, вы видите, что ошибку можно не проверять, делаете ее рантайм. Как-то так, я думаю.

Ответ 3



С помощью проверок в коде вы можете обеспечить чтобы никогда не было NPE а вот присутствие файла на жестком диске не гарантированно, его можно удалить, поэтому нужно нужно заранее обработать такие ситуации

Комментариев нет:

Отправить комментарий