#java #исключения
Вопрос навеян вот этим вопросом. Там мне все советуют преобразовать проверяемое исключение в непроверяемое. А вопрос у меня такой: зачем разработчики Java придумали такой термин как проверяемое исключение? Какой от этого профит? Чтобы знать какой метод может выбросить исключение, а какой нет? Так любой метод может выкинуть какой-нибудь NullPointerException который все равно нужно ловить и обрабатывать? Так чем NullPointerException отличается от IOException который нужно обязательно декларировать в throws? Ни в одном, известном мне, языке, такого термина нет. Единственное объяснение, которое я могу придумать это то, что при возникновении проверяемого исключения, объект находится в некотором предусмотренном состоянии, и при непроверяемом - объект может быть поврежден.
Ответы
Ответ 1
Вопрос о проверяемых и непроверяемых исключениях довольно спорный и часто возникающий, особенно когда появляется куча новых API, которым они мешают нормально развернуться (те же стримы и лямбды, например). Поэтому рассуждать о правильности их ввода спустя больше чем 20 лет после появления языка уже не совсем правильно. NPE непроверяемое просто потому, что может теоретически возникнуть в любой строчке. Деление на ноль потенциально охватывает все случаи деления целых чисел, а OutOfMemoryError может вылететь во время создания любого объекта. Аналогичные причины можно найти и для остальных исключений.Ответ 2
NullPointerException никогда не произойдет, если вы будете делать проверку на null. IOException - такое исключение может воникнуть, даже если вы постараетесь заранее определить, возникнет ли оно. По сути, это для программиста как "чистый код". Он делает более удобно и красиво архитектуру кода. Т.е. если, к примеру, вы видите, что ошибку можно не проверять, делаете ее рантайм. Как-то так, я думаю.Ответ 3
С помощью проверок в коде вы можете обеспечить чтобы никогда не было NPE а вот присутствие файла на жестком диске не гарантированно, его можно удалить, поэтому нужно нужно заранее обработать такие ситуации
Комментариев нет:
Отправить комментарий