Почему NullPointerException не объявляется как контролируемая исключительная ситуация

Это было вопросом, который задают в интервью. NullPointerException очень распространено; почему это не объявляется как контролируемая исключительная ситуация? Я погуглил, но не получил надлежащий ответ.

22
задан Keith Pinson 16 November 2012 в 21:25
поделиться

7 ответов

Почти каждый метод должен объявить его бросание.

public void myMethod(String param) throws NullPointerException {
   //
}

(В качестве примечания - Eclipse, например, выдает предупреждение всякий раз, когда есть «потенциальный доступ к нулевому указателю», чтобы вы могли предотвратить исключение как можно раньше.)

34
ответ дан 29 November 2019 в 03:36
поделиться

Исключения с нулевым указателем являются расширением исключений среды выполнения и, следовательно, являются неожиданными событиями в потоке вашей программы. Не имеет смысла ожидать, что будет выбрано исключение с нулевым указателем (я надеюсь!), И поэтому вы никогда не объявите его как проверенное исключение.

12
ответ дан 29 November 2019 в 03:36
поделиться

Проверенные исключения могут возникать из-за того, что что-то в среде , над которой ваша программа практически не контролирует или не имеет никакого контроля, пошло не так (например, IOException , SQLException ). Вы можете предвидеть это и справиться с этим делом.

NullPointerException (обычно) возникает из-за ошибки в вашем коде. Если ожидается выброс исключения NullPointerException, правильным решением будет исправить ошибку, а не обрабатывать исключение.

3
ответ дан 29 November 2019 в 03:36
поделиться

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

15
ответ дан 29 November 2019 в 03:36
поделиться

Я хотел бы дать ответ одним предложением: это результат ошибки программирования, а исключения ошибок программирования не проверяются исключениями (IllegalStateException, ClassCastException и т. Д. .).

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

3
ответ дан 29 November 2019 в 03:36
поделиться

Мое собственное обязательное определение для проверяемого исключения. Проверенные исключения - это исключения, которые API вызовет в случае возникновения известной нежелательной ситуации

NullPointerException не указывает на «известную нежелательную» ситуацию. Вместо этого они обычно выбрасываются из-за некоторых необработанных ситуаций в коде. То есть в большинстве случаев они возникают из-за неправильной практики кодирования - например, попытки получить размер списка, который не инициализирован должным образом и т. Д. Таким образом, нет смысла делать их проверяемыми исключениями - поскольку каждый объект в Java может быть нулевым. в какой-то момент?!. Исключения NullPoitnerException тоже не следует перехватывать.

2
ответ дан 29 November 2019 в 03:36
поделиться

Зачем включать его, если каждая функция, которую вы пишете, должна будет объявлять его? Просто чтобы упростить вашу жизнь.

0
ответ дан 29 November 2019 в 03:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: